python - 使用 python lib 从 FTP 获取大文件

标签 python ftp

我需要从 FTP 服务器下载一些大文件(每个文件 >30GB)。我正在使用 python standardlib 中的 ftplib,但有一些缺陷:如果我下载一个大文件,如果文件完成,我将无法再使用该连接。之后我收到 EOF 错误,因此连接关闭(由于超时?)并且对于每个后续文件,我将收到错误 421。

据我所读,有两个联系。数据和控制 channel ,其中数据通道似乎工作正常(我可以完全下载文件)但同时控制 channel 超时。 我还读到 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()

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

最佳答案

如果您在使用标准 FTP 时遇到问题,可以尝试使用专为处理此类大文件而设计的不同协议(protocol)。

一些合适的solutions存在。 Rsync 可能是一个很好的开始方式。

关于python - 使用 python lib 从 FTP 获取大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185720/

相关文章:

c# - 使用凭据连接 ftp 服务器

python - 使用 PyMuPDF 将文本添加到 pdf

Python:函数在 for 循环中未接收值

python - Django 左外连接

python - 使用异步 (s)ftp 操作连接 GUI 界面

windows - 使用 Windows 批处理脚本保护 FTP

python - json 到数据帧 : nested list of dictionaries

python - 无法将所有文件移动到新文件夹

java - 用于 Java 客户端/服务器应用程序的 HTTP 或 FTP

Php ftp_connect 在 AWS 服务器上不起作用