Python使用ftplib实现简易FTP客户端的方法
本文实例讲述了Python使用ftplib实现简易FTP客户端的方法。分享给大家供大家参考。具体实现方法如下:
#!/usr/bin/python
#-*-coding:utf-8-*-
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.dir()#显示目录下文件信息
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完整实例:
#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
LocalNames=os.listdir(LocalDir)
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):
ifos.path.isdir(LocalDir)==False:
os.makedirs(LocalDir)
self.ftp.cwd(RemoteDir)
RemoteNames=self.ftp.nlst()
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()
ftp=myFtp('********')
ftp.Login('*****','*****')
#ftp.DownLoadFile('TEST.TXT','others\\runtime.log')#ok
#ftp.UpLoadFile('runtime.log','others\\runtime.log')#ok
#ftp.DownLoadFileTree('bcd','others\\abc')#ok
#ftp.UpLoadFileTree('aaa',"others\\")
ftp.close()
print"ok!"
希望本文所述对大家的Python程序设计有所帮助。