首页 文章资讯内容详情

python ftplib模块

2026-06-01 4 花语

本文内容纲要:

-函数释义 -例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