繁体   English   中英

Python3 ftplib无法获取较大的二进制文件

[英]Python3 ftplib not fetching larger binary files

我有以下脚本可从远程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)."

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM