有一个文件(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()
如何下载缺少网络的文件?
答案 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'
,它将附加到现有的二进制文件中,或者简单地创建一个新的二进制文件,然后打开以进行写入。