对于ftp的操作,无非是获取文件列表和上传或者下载文件
对于ftp的每次操作,要么每次都登陆,操作然后退出。或者每次操作都要检查是否还在连接状态。因此我把登陆和退出操作写成了一个装饰器。
from ftplib import FTP
def deco(func):
def _deco(*args):
args[0].login()
ans=func(*args)
args[0].quit()
return ans
return _deco
@deco
def getLst(ftp, dirName):
ftp.cwd(dirName)
ans=ftp.nlst()
return ans
@deco
def downFile(ftp,ftpFN,localFN):
tempOut=open(localFN,'wb')
ftp.retrbinary('RETR %s' % ftpFN, tempOut.write)
tempOut.close()
return 'Sucess.'
def generateFTP(host,encoding='gbk'):
ans=FTP(host)
ans.encoding=encoding
return ans
获得文件列表和下载文件,都加了一个装饰器。把ftp作为参数传递给函数, 可以尽量的重用代码。
特别注意的是,文件下载后,一定要加上 close操作。强制把文件写入磁盘,否则得到的文件可能不能正常使用。