【问题标题】:Deal with EOFError while downloading files from server从服务器下载文件时处理 EOFError
【发布时间】:2017-05-12 09:48:16
【问题描述】:

用例:

使用 ftplib 下载数十万个类似 /year-month/year-month-day/hours/files 结构的 xmls 文件(大小从字节到 50 mb/文件)。 因此,我循环遍历给定日期的每个小时文件夹,并且对于每个文件夹,我使用 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 文件

我得到了什么:

EOF错误

我已经尝试过的:

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

    中的缓冲区大小

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

问题:

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

【问题讨论】:

  • 什么时候收到EOFError?已经在第一个文件上?还是在后续文件上?在什么声明上?向我们展示异常堆栈跟踪。 - 从你的问题中不清楚,你的问题与“下载数十万个xmls文件”有什么关系。
  • @MartinPrikryl 这似乎不是导致问题的一个特定文件。这绝对不是第一个。我在使用ftp.retrbinary() 下载文件时得到了这个EOFError。抱歉,我完全忘记了堆栈跟踪,我会在星期一发布。这与我下载了数十万个 xmls 文件这一事实有关,因为我已经用 2000 个文件测试了脚本并且我没有遇到任何异常,但是我总是得到大约 287000 个文件。而且我不明白的是,脚本每次都会删除相同数量/数量的 xml 文件,大约 159 000 并且它总是
  • 所有这些信息应该从一开始就包含在您的问题中。请编辑它。
  • 你检查服务器端日志了吗?服务器端可能存在会话时间或数据量限制。
  • 好主意!我会检查并回复你。

标签: python-2.7 ftp ftplib eoferror


【解决方案1】:

我终于找到了解决问题的方法。我现在不是为每个子文件夹打开一个连接,而是为每个要下载的文件打开一个连接。它的性能较差,但我可以通过这个EOFError。 我还发现我要从中下载文件的 FTP 服务器有一些限制,例如并行连接的数量或连接的持续时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2012-08-15
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多