我使用以下代码从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
答案 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
语句。