Python 只下载循环的第一个文件
我已经编写了一个类,当调用一个类实例时,该类会从ftp站点下载一个文件,并给出部分文件名。后来,我编写了一个for循环,并将类实例集成到for循环中,以便下载多个日期范围内的文件。这是一个日期范围,因为文件是根据生成日期命名的。所以有每日档案。运行代码时,系统会要求您输入日期范围。成功下载范围的第一个文件,但当程序停止并打印以下错误时:Python 只下载循环的第一个文件,python,oop,loops,ftp,traceback,Python,Oop,Loops,Ftp,Traceback,我已经编写了一个类,当调用一个类实例时,该类会从ftp站点下载一个文件,并给出部分文件名。后来,我编写了一个for循环,并将类实例集成到for循环中,以便下载多个日期范围内的文件。这是一个日期范围,因为文件是根据生成日期命名的。所以有每日档案。运行代码时,系统会要求您输入日期范围。成功下载范围的第一个文件,但当程序停止并打印以下错误时: Traceback (most recent call last): File "ftplib04Simplified.py", line 42,
Traceback (most recent call last):
File "ftplib04Simplified.py", line 42, in <module>
FtpDownloader("ladsweb.nascom.nasa.gov","/allData/5/MOD11A1/",a).findFile(10,11)
File "ftplib04Simplified.py", line 32, in findFile
self.ftp.retrbinary('RETR %s' % filename, open(filename,'wb').write)
File "/usr/lib/python3.3/ftplib.py", line 424, in retrbinary
with self.transfercmd(cmd, rest) as conn:
File "/usr/lib/python3.3/ftplib.py", line 386, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "/usr/lib/python3.3/ftplib.py", line 352, in ntransfercmd
resp = self.sendcmd(cmd)
File "/usr/lib/python3.3/ftplib.py", line 259, in sendcmd
return self.getresp()
File "/usr/lib/python3.3/ftplib.py", line 233, in getresp
raise error_perm(resp)
ftplib.error_perm: 550 No such file.
shell returned 1
这正是您指示计算机执行的操作:下载第一个文件后,立即中断下载循环:
def findFile(self,h,v,fileList=[]):
"""checks for the file containing the given h and h and downloads it using retrbinary"""
hh= "%02d" % h
vv= "%02d" % v
tilename = "h%sv%s" % (hh,vv)
print ("Image tile %s is downloading..." % tilename)
self.ftp.retrlines('NLST',fileList.append)
for filename in fileList:
if tilename in filename:
self.ftp.retrbinary('RETR %s' % filename, open(filename,'wb').write)
print ("File downloaded")
break
else:
print (filename, "not found")
self.ftp.close()
只要更换上面继续的中断,它就会工作。-更好的是,由于for循环中没有其他语句,只需完全删除该行。我尝试了“continue”,但它不起作用“休息”在课堂上。如果找到具有所需名称的文件,我使用它来中断操作。但是,我发布的代码底部的循环从一开始就启动了另一个类实例。所以,这个“休息”是在课堂上。我们讨论的循环在类之外,并在类实例上迭代。
def findFile(self,h,v,fileList=[]):
"""checks for the file containing the given h and h and downloads it using retrbinary"""
hh= "%02d" % h
vv= "%02d" % v
tilename = "h%sv%s" % (hh,vv)
print ("Image tile %s is downloading..." % tilename)
self.ftp.retrlines('NLST',fileList.append)
for filename in fileList:
if tilename in filename:
self.ftp.retrbinary('RETR %s' % filename, open(filename,'wb').write)
print ("File downloaded")
break
else:
print (filename, "not found")
self.ftp.close()