下载不在python中工作?
我编写了一个简单的python程序,从FTP位置获取文件但是当我执行它时,它会出错[Errno 13] Permission denied message。
我的代码如下。知道为什么它不起作用吗?
import ftplib
from ftplib import FTP, error_perm
def getFTPDir(dirpath):
f = ftplib.FTP(ip, username, password)
try:
f.cwd(dirpath)
nameList = f.nlst()
oldest = nameList[0]
newest = nameList[-1]
newest = oldest
newDirPath = dirpath +'/'+ newest
print f.cwd(newDirPath)
subNameList = f.nlst()
for i in range (len(subNameList)):
f.cwd( newDirPath + '/' + str(subNameList[i]) )
nameList1 = f.nlst()
filename = nameList1[i]
print "downloading..............", filename
f.retrbinary('RETR '+ filename, open(os.path.join(destination,localPath),"wb").write)
print filename + " downloaded"
try:
fhandle = open(filename, 'wb')
f.retrbinary('RETR ' + filename, fhandle.write)
except Exception, e:
print str(e)
finally:
fhandle.close()
except error_perm:
return
except Exception, e:
print str(e)
finally:
f.close()
答案 0 :(得分:0)
ftplib的文档说(强调我的):
FTP.retrbinary(命令,回调[,maxblocksize [,rest]])
以二进制传输模式检索文件。命令应该是一个合适的RETR命令:'RETR filename'。 为每个接收到的数据块调用回调函数,并使用单个字符串参数给出数据块。
所以这里有两个可能的错误原因:
destination
和localPath
可能指向不存在的文件夹或不可写的文件夹或文件(顺便说一下,你会在每次迭代时重写相同的文件......)不要这样做,但继续做下一行写的内容,或者更好地使用with:
try:
localname = os.path.join(destination,localPath)
# a spy to control the names, comment it out when it works
print filename, " -> ", localname
with open(localname, 'wb') as fhandle
f.retrbinary('RETR ' + filename, fhandle.write)
except Exception as e:
print str(e)
这样,你可以看到你试图写的地方......