Python ftplib:上传到ftp的bz2文件有时会被破坏

时间:2017-07-26 13:56:44

标签: python ftplib

我使用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并不能解决这个问题。

我还注意到损坏的文件与好文件的字节完全相同。我猜所有必要的信息都已上传,所以我真的不明白为什么文件已损坏。

1 个答案:

答案 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.

它不断尝试上传文件,并且会上传文件。