python:使用ftplib编写FTP客户端
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python:使用ftplib编写FTP客户端相关的知识,希望对你有一定的参考价值。
Python中的ftplib模块
Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件
FTP的工作流程及基本操作可参考协议RFC959
ftp登陆连接
from ftplib import FTP #加载ftp模块
ftp=FTP() #设置变量
ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.connect("IP","port") #连接的ftp sever和端口
ftp.login("user","password")#连接的用户名,密码
print ftp.getwelcome() #打印出欢迎信息
ftp.cmd("xxx/xxx") #更改远程目录
bufsize=1024 #设置的缓冲区大小
filename="filename.txt" #需要下载的文件
file_handle=open(filename,"wb").write #以写模式在本地打开文件
ftp.retrbinaly("RETR filename.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("STOR filename.txt",file_handel,bufsize) #上传目标文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下载FTP文件
自己写的FTP下载客户端,如果需要上传客户端,请修改下就可以了。
#!/usr/local/bin/python2.7 # -*- coding: utf-8 -*- ‘‘‘ 使用ftplib编写FTP客户端连接,并指定目录下载。 ‘‘‘ __author__ = ‘linwangyi‘ __date__ ="2016-02-25 12:50" import ftplib ,socket from sys import exit import os class DOFTP(): def __init__(self): #定义公用变量 self.RED_COLOR=‘\033[1;31;48m‘ #红 ,配置终端输出的颜色 self.BLUE_COLOR=‘\033[1;34;48m‘ #红 ,配置终端输出的颜色 self.RES=‘\033[0m‘ def FTP_DOWN(self,HostIP,SerPort,FtpUser,FtpPasswd,RootDir,Server_files,Local_dir): MyFTP = ftplib.FTP() try: MyFTP.connect(host=HostIP,port=SerPort,timeout=5) print ‘%s*****已经成功连接"%s"服务器FTP服务!%s‘ % (self.BLUE_COLOR,HostIP,self.RES) except (socket.error, socket.gaierror), e: print ‘%s错误:无法访问"%s" FTP服务,请检查!错误代码为"%s"%s‘ % (self.RED_COLOR,HostIP,e,self.RES) exit() try: MyFTP.login(user=FtpUser,passwd=FtpPasswd) print ‘%s*****已经成功登陆"%s"服务器FTP服务!%s‘ % (self.BLUE_COLOR,HostIP,self.RES) print MyFTP.getwelcome()#显示ftp服务器欢迎信息 except (ftplib.error_perm), e: print ‘%s错误:登陆失败!,请检查用户名"%s“密码"%s"是否正确!错误代码为"%s"%s‘ % (self.RED_COLOR,FtpUser,FtpPasswd,e,self.RES) exit() MyFTP.cwd(RootDir) #进入FTP目录 FTP_files = MyFTP.nlst() #取FTP当前目录内容 if not Server_files: #如果要下载为空,将下载该目录全部内容 DownLists = FTP_files print "FTP全部目录%s"% DownLists else: #判断指定下载的文件是否在FTP目录中。 DownLists = [] #下载列表 NODownLists =[] #没有下载列表 for line in Server_files: if line in FTP_files: DownLists.append(line) else: NODownLists.append(line) if NODownLists: print "%s在FTP服务器并没有指定文件%s。%s"% (self.RED_COLOR,",".join(NODownLists),self.RES) if DownLists: print "%s正在从FTP服务器下载如下文件%s。%s"% (self.BLUE_COLOR,",".join(DownLists),self.RES) bufsize = 1024 for line in DownLists: FileName = open(Local_dir + line,‘wb‘).write MyFTP.retrbinary(‘RETR %s‘ % os.path.basename(line),FileName,bufsize) MyFTP.quit() print "%sFTP已经成功退出。%s"% (self.BLUE_COLOR,self.RES) if __name__ == "__main__": HostIP=‘XXXXX‘ #FTP服务器IP或者域名 SerPort=‘21‘ #FTP端口 FtpUser=‘ftpuser‘ #FTP用户 FtpPasswd=‘XXXXXX‘ #FTP对应用户密码 RootDir=‘/test‘ #FTP目录 Server_files = [‘1.txt‘,‘2.txt‘,‘3.txt‘,‘4.txt‘] #下载服务器文件列表 #Server_files = [] #如果要下载为空,将下载该目录全部内容 Local_dir ="D:/testtmp/downfile/" #本地目录 #Local_files =[‘a.txt‘,‘b.txt‘] #上传服务器本地文件列表 s = DOFTP() if os.path.exists(Local_dir)== False: #判断本地是否有该文件目录,如果没有,将创建 try: os.mkdir(Local_dir) print "%s创建本地目录‘%s‘%s"% (s.BLUE_COLOR,Local_dir,s.RES) except: print "%s无法创建本地目录‘%s‘,原因是无该盘符或者目录路径有问题,程序直接退出!%s"% (s.RED_COLOR,Local_dir,s.RES) exit() #退出程序 s.FTP_DOWN(HostIP,SerPort,FtpUser,FtpPasswd,RootDir,Server_files,Local_dir)
执行结果如下:
本文出自 “都市布衣” 博客,请务必保留此出处http://sunday208.blog.51cto.com/377871/1745041
以上是关于python:使用ftplib编写FTP客户端的主要内容,如果未能解决你的问题,请参考以下文章