2017-07-26 83 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

谢谢你的建议。我无法立即尝试您的代码,但似乎即使上传的文件已损坏,代码也不会引发异常。上传过程没有任何错误,我需要检查所有上传的文件以找出损坏的文件。 –