恢复下载文件ftp python3。*

时间:2019-06-23 17:18:57

标签: python file ftp

有一个文件(1-7Gb)需要拾取。网络定期掉线,因此有必要实施恢复方法。例如,在1个通信会话中,下载了20%的网络消失了,在2个会话中出现了,下载了20%的数据,以此类推。等等。我了解您可以像这样下载文件

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 个答案:

答案 0 :(得分:1)

retrbinary命令接受一个可选的rest参数,该参数应包含一个字符串,该字符串指示重新开始传输的字节偏移量。 transfercmd documentation中对此进行了更详细的描述;一些文件传输命令支持此可选参数。

此功能是可选的,因此服务器可能不支持它。您应该准备好处理错误返回,然后退回以获取整个文件(或中止)。

您的调用代码当然应该设置为追加到未完成的文件中,而不是覆盖它!

未经测试,不在我的计算机上

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',它将附加到现有的二进制文件中,或者简单地创建一个新的二进制文件,然后打开以进行写入。