使用python lib

时间:2015-05-12 08:36:35

标签: python ftp

我需要从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()

是否有任何调整或其他我可以使用的库,它支持大文件?

1 个答案:

答案 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.