如何解决FTP错误2不是目录

时间:2015-02-06 05:12:49

标签: python ftp

我使用以下代码从ftp服务器下载文件。但是我收到错误[Errno 2] No such file or directory:,但是服务器中存在的文件可以通过终端下载。任何人都可以帮助我!!

import ftplib
import os
remotpath='folder/subfolder'
try:
   ftpclient = ftplib.FTP('ftp.xxxx.com')
   ftpclient.login('user', 'pass')
   ftpclient.cwd(remotpath)
   print "login succeessfull"
   files = ftpclient.nlst()
   for eachFile in files:
       saveTo = os.path.join(remotpath,eachFile)
       if (not os.path.exists(saveTo)):
           try:
            ftpclient.retrbinary('RETR ' + eachFile, open(saveTo, 'wb').write)
            #logging.info('\tdownloaded '  + saveTo)
            downloaded += 1
        except BaseException as e:
            print('\terror downloading inside first %s - %s' % (eachFile, e.__str__()))
        except ftplib.error_perm:
            print('\terror downloading inside second %s - %s' % (eachFile, ftplib.error_perm))  

except Exception as e:
       print e    

1 个答案:

答案 0 :(得分:1)

目标目录./folder/subfolder是否存在?

如果不是,则需要在下载文件之前创建它。使用您的操作系统命令(mkdir)或使用os.makedirs()的Python执行此操作:

import os
try:
    os.makedirs(remotpath)
except OSError as exception:
    if exception.errno != errno.EEXIST:
        raise

您可以在for循环之前的某处添加它。

在另一个问题上,异常处理程序的顺序意味着内部try块中引发的所有异常将在except BaseException语句中处理。这意味着ftplib.error_perm将在该语句中被捕获,因为BaseException更通用,而不是您所期望的ftplib.error_perm语句。

您应该按照增加的一般性顺序重新排序except语句。