Команда retrbinary
принимает необязательный аргумент rest
, который должен содержать строку, указывающую смещение в байтах, с которого начинается перезапуск передачи. Это описано более подробно в transfercmd
документации ; несколько команд передачи файлов поддерживают этот необязательный аргумент.
Это средство не является обязательным, поэтому сервер может не поддерживать его; Вы должны быть готовы обработать возврат ошибки и вернуться к извлечению всего файла (или прерыванию).
Ваш код вызова, конечно, должен быть настроен на добавление к незаконченному файлу, а не на его перезапись!
Не проверено, не на моем компьютере:
import ftplib
import os
path = '/'
filename = '100KB.zip'
ftp = ftplib.FTP("speedtest.tele2.net")
ftp.login("anonymous", "")
ftp.cwd(path)
if os.path.exists(filename):
restarg = {'rest': str(os.path.getsize(filename))}
else:
restarg = {}
ftp.retrbinary("RETR " + filename ,open(filename, 'ab').write, **restarg)
print("untranslated string in some Slavic language?\n")
ftp.quit()
Нотация Python **kwargs
позволяет нам использовать словарь для передачи аргументов ключевых слов в вызове функции. Мы передаем пустой словарь (без дополнительных аргументов ключевого слова), если файл еще не существует, и в противном случае dict
, содержащий ключевое слово 'rest'
и его значение. В обоих случаях мы используем файловый режим 'ab'
, который добавит к существующему двоичному файлу или просто создаст новый двоичный файл, и откроет его для записи.