Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 只下载循环的第一个文件_Python_Oop_Loops_Ftp_Traceback - Fatal编程技术网

Python 只下载循环的第一个文件

Python 只下载循环的第一个文件,python,oop,loops,ftp,traceback,Python,Oop,Loops,Ftp,Traceback,我已经编写了一个类,当调用一个类实例时,该类会从ftp站点下载一个文件,并给出部分文件名。后来,我编写了一个for循环,并将类实例集成到for循环中,以便下载多个日期范围内的文件。这是一个日期范围,因为文件是根据生成日期命名的。所以有每日档案。运行代码时,系统会要求您输入日期范围。成功下载范围的第一个文件,但当程序停止并打印以下错误时: Traceback (most recent call last): File "ftplib04Simplified.py", line 42,

我已经编写了一个类,当调用一个类实例时,该类会从ftp站点下载一个文件,并给出部分文件名。后来,我编写了一个for循环,并将类实例集成到for循环中,以便下载多个日期范围内的文件。这是一个日期范围,因为文件是根据生成日期命名的。所以有每日档案。运行代码时,系统会要求您输入日期范围。成功下载范围的第一个文件,但当程序停止并打印以下错误时:

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()