Python3 ftplib没有获取更大的二进制文件

时间:2015-02-03 18:45:57

标签: python python-3.x ftp ftplib

我有以下脚本从远程FTP站点获取文件并在本地下载:

for i in ftp.nlst():
  ftp.retrbinary("RETR " + i, open(local_file_path + "/" + i, "wb").write)

调试信息显示正在提取文件,我可以看到它正在流式传输到本地系统。一段时间后,下载将暂停,似乎暂停...

get "150 Opening BINARY mode data connection for 'filename' (163479928 bytes).\n"
resp "150 Opening BINARY mode data connection for 'filename' (163479928 bytes)."

3 个答案:

答案 0 :(得分:0)

您是否尝试过使用maxblocksize参数?例如:

ftp.retrbinary("RETR " + i, open(i, "wb").write, maxblocksize=1048576)

我不确定是什么原因引起了您的问题,但如果您的文件很大,则可能与FTP服务器端的缓冲区大小有关。

答案 1 :(得分:0)

如果您要检索多个文件,我会列出名称并确保每个文件都正确关闭。

for name in ftp.nlst():
  print(name)  # for debugging
  with  open(local_file_path + "/" + name, "wb") as f:
      ftp.retrbinary("RETR " + i, f.write)

答案 2 :(得分:0)

此问题的底线是互联网连接(下载速度1.45MB)以及ftplib如何处理连接丢弃。使用 retrbinary 时,如果连接断开,则永远不会恢复。 ftplib需要支持块模式(RFC 959),因此如果连接断开,它可以从收到的最新块开始恢复。