Python-ftplib:bz2上传到ftp的文件有时会损坏

Python-ftplib:bz2上传到ftp的文件有时会损坏,python,ftplib,Python,Ftplib,我使用ftplib模块将许多bz2文件上传到ftp(每天大约1000个文件,每个文件大约5 MB,存储一个numpy阵列)。偶尔,一些上传的文件会损坏。当我尝试使用bz2和numpy读取它时,我得到了错误“IOError:invalid data stream”。如果我尝试使用WinRAR之类的软件解压它,我会收到消息“文件名中的校验和错误。文件已损坏。” 上传数据的代码没有什么特别的。基本上是这样的: while True: try: fidFile = open(fi

我使用ftplib模块将许多bz2文件上传到ftp(每天大约1000个文件,每个文件大约5 MB,存储一个numpy阵列)。偶尔,一些上传的文件会损坏。当我尝试使用bz2和numpy读取它时,我得到了错误“IOError:invalid data stream”。如果我尝试使用WinRAR之类的软件解压它,我会收到消息“文件名中的校验和错误。文件已损坏。”

上传数据的代码没有什么特别的。基本上是这样的:

while True:
    try:
        fidFile = open(fileName, 'rb')
        ftp.storbinary('STOR '+fileName, fidFile)
        fidFile.close()
        break
    except:
        continue
对于损坏的文件,如果我使用相同的代码再次上传它们,大多数情况下我可以得到好的文件

使用不同的ftp并不能消除此问题


我还注意到,损坏的文件与良好的文件具有完全相同的字节。我想所有必要的信息都已上载,因此我真的不明白文件为何已损坏。

解决此问题的方法可以是:

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.

它不断尝试上载文件,并将在上载文件时停止。此问题的解决方法可以是:

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.

它一直在尝试上载文件,并将在上载文件时停止。

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