python ftplib模块
本文内容纲要:
-函数释义
-例1:下载、上传文件
-例2:上传、下载文件/目录
-例3:异常处理
-ftp例子参考链接
函数释义
Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下
ftp登陆连接
fromftplibimportFTP#加载ftp模块
ftp=FTP()#设置变量
ftp.set_debuglevel(2)#打开调试级别2,显示详细信息
ftp.connect("IP","port")#连接的ftpsever和端口
ftp.login("user","password")#连接的用户名,密码
printftp.getwelcome()#打印出欢迎信息
ftp.cmd("xxx/xxx")#进入远程目录
bufsize=1024#设置的缓冲区大小
filename="filename.txt"#需要下载的文件
file_handle=open(filename,"wb").write#以写模式在本地打开文件
ftp.retrbinaly("RETRfilename.txt",file_handle,bufsize)#接收服务器上文件并写入本地文件
ftp.set_debuglevel(0)#关闭调试模式
ftp.quit()#退出ftp
ftp相关命令操作
ftp.cwd(pathname)#设置FTP当前操作的路径
ftp.dir()#显示目录下所有目录信息
ftp.nlst()#获取目录下的文件
ftp.mkd(pathname)#新建远程目录
ftp.pwd()#返回当前所在位置
ftp.rmd(dirname)#删除远程目录
ftp.delete(filename)#删除远程文件
ftp.rename(fromname,toname)#将fromname修改名称为toname。
ftp.storbinaly("STORfilename.txt",file_handel,bufsize)#上传目标文件
ftp.retrbinary("RETRfilename.txt",file_handel,bufsize)#下载FTP文件
FTP.quit()与FTP.close()的区别
- FTP.quit():发送QUIT命令给服务器并关闭掉连接。这是一个比较“缓和”的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。
- FTP.close():单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在FTP.quit()之后。
例1:下载、上传文件
#coding:utf-8
fromftplibimportFTP
importtime
importtarfile
#!/usr/bin/python
#-*-coding:utf-8-*-
fromftplibimportFTP
defftpconnect(host,username,password):
ftp=FTP()
#ftp.set_debuglevel(2)#打开调试级别2,显示详细信息
ftp.connect(host,21)#连接
ftp.login(username,password)#登录,如果匿名登录则用空串代替即可
returnftp
defdownloadfile(ftp,remotepath,localpath):
bufsize=1024#设置缓冲块大小
fp=open(localpath,'wb')#以写模式在本地打开文件
ftp.retrbinary('RETR'+remotepath,fp.write,bufsize)#接收服务器上文件并写入本地文件
ftp.set_debuglevel(0)#关闭调试
fp.close()#关闭文件
defuploadfile(ftp,remotepath,localpath):
bufsize=1024
fp=open(localpath,'rb')
ftp.storbinary('STOR'+remotepath,fp,bufsize)#上传文件
ftp.set_debuglevel(0)
fp.close()
if__name__=="__main__":
ftp=ftpconnect("******","***","***")
downloadfile(ftp,"***","***")
uploadfile(ftp,"***","***")
ftp.quit()
例2:上传、下载文件/目录
#coding:utf-8
fromctypesimport*
importos
importsys
importftplib
classmyFtp:
ftp=ftplib.FTP()
bIsDir=False
path=""
def__init__(self,host,port='21'):
#self.ftp.set_debuglevel(2)#打开调试级别2,显示详细信息
#self.ftp.set_pasv(0)#0主动模式1#被动模式
self.ftp.connect(host,port)
defLogin(self,user,passwd):
self.ftp.login(user,passwd)
printself.ftp.welcome
defDownLoadFile(self,LocalFile,RemoteFile):
file_handler=open(LocalFile,'wb')
self.ftp.retrbinary("RETR%s"%(RemoteFile),file_handler.write)
file_handler.close()
returnTrue
defUpLoadFile(self,LocalFile,RemoteFile):
ifos.path.isfile(LocalFile)==False:
returnFalse
file_handler=open(LocalFile,"rb")
self.ftp.storbinary('STOR%s'%RemoteFile,file_handler,4096)
file_handler.close()
returnTrue
defUpLoadFileTree(self,LocalDir,RemoteDir):
ifos.path.isdir(LocalDir)==False:
returnFalse
print"LocalDir:",LocalDir
LocalNames=os.listdir(LocalDir)
print"list:",LocalNames
printRemoteDir
self.ftp.cwd(RemoteDir)
forLocalinLocalNames:
src=os.path.join(LocalDir,Local)
ifos.path.isdir(src):self.UpLoadFileTree(src,Local)
else:
self.UpLoadFile(src,Local)
self.ftp.cwd("..")
return
defDownLoadFileTree(self,LocalDir,RemoteDir):
print"remoteDir:",RemoteDir
ifos.path.isdir(LocalDir)==False:
os.makedirs(LocalDir)
self.ftp.cwd(RemoteDir)
RemoteNames=self.ftp.nlst()
print"RemoteNames",RemoteNames
printself.ftp.nlst("/del1")
forfileinRemoteNames:
Local=os.path.join(LocalDir,file)
ifself.isDir(file):
self.DownLoadFileTree(Local,file)
else:
self.DownLoadFile(Local,file)
self.ftp.cwd("..")
return
defshow(self,list):
result=list.lower().split("")
ifself.pathinresultand"<dir>"inresult:
self.bIsDir=True
defisDir(self,path):
self.bIsDir=False
self.path=path
#thisuescallbackfunction,thatwillchangebIsDirvalue
self.ftp.retrlines('LIST',self.show)
returnself.bIsDir
defclose(self):
self.ftp.quit()
if__name__=="__main__":
ftp=myFtp('*****')
ftp.Login('***','***')
ftp.DownLoadFileTree('del','/del1')#ok
ftp.UpLoadFileTree('del',"/del1")
ftp.close()
print"ok!"
注:目录内为文件,若为目录则无法传输
例3:异常处理
#coding:utf-8
#fromftplibimportFTP
importftplib
importsocket
importos
defftpconnect(ftp_info):
try:
ftp=ftplib.FTP(ftp_info[0])
except(socket.error,socket.gaierror):
print"ERROR:cannotreach%s"%ftp_info[0]
returnNone
username=ftp_info[1]
passwd=ftp_info[2]
try:
ftp.login(username,passwd)
exceptftplib.error_perm:
print"ERROR:cannotloginanonymously"
ftp.quit()
returnNone
returnftp
if__name__=="__main__":
info_list=["10.19.3.199","fastupdate_amap","@utonavi&A.map"]
ftp=ftpconnect(info_list)
ifnotftp:
exit(1)
bufsize=1024
fname="20150416113942674.tar.gz"
fp=open(os.path.join(".",fname),'wb')
remotefile=os.path.join("/ADF++",fname)
ftp.retrbinary("RETR"+remotefile,fp.write,bufsize)
#是否有目录,没有就创建;有的话看是否有权限创建
a=ftp.dir()
try:
ftp.cwd("jimi")
exceptftplib.error_perm:
try:
ftp.mkd("jimi")
exceptftplib.error_perm:
print"WARNING:Uhavenoauthoritytomakedir"
finally:
ftp.quit()
ftp例子参考链接
http://www.example-code.com/python/ftp.asp
本文内容总结:函数释义,例1:下载、上传文件,例2:上传、下载文件/目录,例3:异常处理,ftp例子参考链接,
原文链接:https://www.cnblogs.com/kaituorensheng/p/4480512.html