我需要从FTP服务器下载一些大文件(每个文件大约30GB)。我正在使用python standardlib中的ftplib但是有一些陷阱:如果我下载一个大文件,如果文件完成,我就不能再使用连接了。之后我收到EOF错误,因此关闭连接(由于超时?),对于每个后续文件,我将收到错误421.
从我读到的,有两个连接。数据和控制通道,数据通道似乎正常工作(我可以完整地下载文件)但控制通道在此期间超时。 我还读到ftplib(和其他python ftp库)不适合大文件,可能只支持大约1GB的文件。 这里有一个类似的问题:How to download big file in python via ftp (with monitoring & reconnect)?这不太相同,因为我的文件比较大。
我目前的代码如下:
import ftplib
import tempfile
ftp = ftplib.FTP_TLS()
ftp.connect(host=server, port=port)
ftp.login(user=user, passwd=password)
ftp.prot_p()
ftp.cwd(folder)
for file in ftp.nlst():
fd, local_filename = tempfile.mkstemp()
f = open(fd, "wb")
ftp.retrbinary('RETR %s' % file, callback=f.write, blocksize=8192)
f.close()
是否有任何调整或其他我可以使用的库,它支持大文件?
答案 0 :(得分:0)
If you experience issues with standard FTP, you can try using a different protocol that is specifically designed to handle such large files.
A number of suitable solutions exist. Rsync would probably be a good way to start.