возобновить загрузку файла ftp python3. * - PullRequest
0 голосов
/ 23 июня 2019

Есть файл (1-7 Гб), который вам нужно подобрать.Сеть периодически падает, поэтому необходимо реализовать метод резюме.Например, в 1 сеансе связи загружено 20%, сеть исчезла, появилось 2 сеанса, загрузка пошла с 20% и т. Д. Помогите, пожалуйста, в Python только начали разбираться.Я понимаю, что вы можете загрузить файл, как этот

import ftplib
path = ‘/’
filename = ‘100KB.zip’
ftp = ftplib.FTP(“speedtest.tele2.net”) 
ftp.login(“anonymous”, “”) 
ftp.cwd(path)
ftp.retrbinary(“RETR ” + filename ,open(filename, ‘wb’).write)
print(“. Загрузка успешно окончена!\n”)
ftp.quit()

Как скачать файл с отсутствующей сетью?

1 Ответ

1 голос
/ 23 июня 2019

Команда 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', который добавит к существующему двоичному файлу или просто создаст новый двоичный файл, и откроет его для записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...