2015-05-12 25 views
3

我需要從FTP服務器下載一些大文件(每個文件大於30GB)。我使用python standardlib中的ftplib,但有一些缺陷:如果我下載了一個大文件,如果文件結束,我不能再使用該連接。之後我得到一個EOF錯誤,所以連接被關閉(由於超時?),並且對於每個後續文件,我將得到一個錯誤421.使用python lib從FTP獲取大文件

從我讀到的,有兩個連接。數據和控制通道,數據通道似乎正常工作(我可以完全下載文件),但控制通道在此期間超時。 我也讀過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

如果遇到標準FTP問題,可以嘗試使用專門設計用於處理此類大型文件的不同協議。

存在多個合適的solutions。 Rsync可能是一個很好的開始。

相關問題