用例:
使用 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 文件
我得到了什么:
EOF错误
我已经尝试过的:
- 我已经浏览了关于stackoverflow和网络上的所有可能的帖子。
- 我试图为小时文件夹中的每个子文件夹关闭并打开一个新连接。
- 它似乎不是导致问题的一个特定文件。这绝对不是第一个。我
EOFError
在下载文件时得到这个ftp.retrbinary()
。这与我下载了数十万个 xmls 文件的事实有关,因为我已经用 2000 个文件测试了脚本并且我没有遇到任何异常,但是我总是得到大约 287000 个文件。我不明白的是,脚本每次下载相同数量/数量的 xml 文件,大约 159 000 并且它总是 我试图在
ftp.retrbinary('RETR ' + filename, fhandle.write,4096)
问题:
可能是我错过了什么?如何处理此 EOFError 以继续下载我的所有文件......并且不会失去理智。