从服务器下载文件时处理EOFError

时间:2017-05-12 09:48:16

标签: python-2.7 ftp ftplib eoferror

使用案例

使用ftplib下载数十万个xmls文件(大小从字节到50 MB /文件),结构类似于/ year-month / year-month-day / hours / files。 所以我遍历每个小时文件夹一天,每一个我用ftp.nlst()存储所有文件名,然后我循环遍历每个文件名,我就像这样下载相关文件。

with open(local_file, 'wb') as fhandle:
    try:
        ftp.retrbinary('RETR ' + filename, fhandle.write)
    except EOFError:
        try:
            fhandle.close()
            os.remove(local_file)
            ftp = ftplib.FTP()
            ftp.connect(self.remote_host,self.port, timeout=60)
            ftp.login(self.username, self.passwd, acct="")
            ftp.cwd(self.input_folder + '/' + subdir)
            try:
                with open(local_file, 'wb') as fhandle:
                ftp.retrbinary('RETR ' + filename, fhandle.write, 8192)
            except:
                self.log.error('i give up !!!')

预期:

对于作为输入文件夹提供的每一天,下载所有相关的xml文件

我得到了什么:

的EOFError

我已尝试过的内容:

  • 我已经删除了关于这个主题的所有可能的帖子 stackoverflow和网络一般。
  • 我试图关闭并打开 小时文件夹中每个子文件夹的ne连接。
  • 它似乎不是导致问题的一个特定文件。绝对不是第一个。我在使用EOFError下载文件时得到此ftp.retrbinary()。这与我下载了数十万个xmls文件的事实有关,因为我已经用2000个文件测试了脚本,我没有任何例外但是有大约287000个文件我总是得到它。我不明白的是,脚本每次下载相同数量/数量的xml文件,大约159000,而且始终是
  • 我尝试使用

    中的buffersize

    ftp.retrbinary('RETR ' + filename, fhandle.write,4096)

问题:

可能是我错过了什么? 如何处理这个EOFError继续下载我的所有文件......而且不会失去理智。

0 个答案:

没有答案