2017-07-26 88 views
1

我使用ftplib模塊將許多bz2文件上傳到FTP(每天約1000個文件,每個文件大約5 MB,存儲一個numpy數組)。偶爾會有一些上傳的文件被破壞。當我嘗試使用bz2和numpy讀取它時,出現錯誤「IOError:invalid data stream」。如果我嘗試使用WinRAR等軟件對其進行解壓縮,則會出現「文件名爲的校驗和錯誤消息,該文件已損壞。」Python ftplib:上傳到FTP的bz2文件有時會損壞

上傳數據的代碼沒有特別之處。基本上,它看起來是這樣的:

while True: 
    try: 
     fidFile = open(fileName, 'rb') 
     ftp.storbinary('STOR '+fileName, fidFile) 
     fidFile.close() 
     break 
    except: 
     continue 

對於損壞的文件,如果我上傳他們再次使用相同的代碼,大部分的時間,我可以得到良好的文件。

使用不同的ftp並不能消除這個問題。

我也注意到,損壞的文件與好文件具有完全相同的字節。我猜所有必要的信息已經上傳了,所以我真的不明白爲什麼文件被損壞了。

回答

0

的辦法解決這個問題可以是:

def upload(fileName): 
    try: 
     fidFile = open(fileName, 'rb') 
     ftp.storbinary('STOR '+fileName, fidFile) 
     fidFile.close() 
    except Exception as e: 
     print(e) 
     upload(fileName) 
     # Can be improved by restricting retry limit. 

它不停地嘗試上傳的文件,將關閉那些被上傳。

+0

謝謝你的建議。我無法立即嘗試您的代碼,但似乎即使上傳的文件已損壞,代碼也不會引發異常。上傳過程沒有任何錯誤,我需要檢查所有上傳的文件以找出損壞的文件。 –