我使用ftplib模块将许多bz2文件上传到ftp(每天大约1000个文件,每个文件大约5 MB,存储一个numpy数组)。偶尔,一些上传的文件已损坏。当我尝试使用bz2和numpy读取它时,我收到错误" IOError:无效的数据流"。如果我尝试使用WinRAR等软件解压缩它,我会在 filename 中收到消息" Checksum error。该文件已损坏。"
上传数据的代码没有什么特别之处。基本上它看起来像这样:
while True:
try:
fidFile = open(fileName, 'rb')
ftp.storbinary('STOR '+fileName, fidFile)
fidFile.close()
break
except:
continue
对于损坏的文件,如果我使用相同的代码再次上传它们,大多数时候我都可以获得好的文件。
使用不同的ftp并不能解决这个问题。
我还注意到损坏的文件与好文件的字节完全相同。我猜所有必要的信息都已上传,所以我真的不明白为什么文件已损坏。
答案 0 :(得分: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.
它不断尝试上传文件,并且会上传文件。