使用案例
使用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
我已尝试过的内容:
EOFError
下载文件时得到此ftp.retrbinary()
。这与我下载了数十万个xmls文件的事实有关,因为我已经用2000个文件测试了脚本,我没有任何例外但是有大约287000个文件我总是得到它。我不明白的是,脚本每次下载相同数量/数量的xml文件,大约159000,而且始终是我尝试使用
中的buffersize ftp.retrbinary('RETR ' + filename, fhandle.write,4096)
问题:
可能是我错过了什么? 如何处理这个EOFError继续下载我的所有文件......而且不会失去理智。