设为首页 收藏本站
查看: 754|回复: 0

[经验分享] python:使用ftplib编写FTP客户端

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-2-26 11:01:07 | 显示全部楼层 |阅读模式
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下载客户端,如果需要上传客户端,请修改下就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/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)




执行结果如下:
wKioL1bOu93R-0CmAAApC5cMQfo947.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-183008-1-1.html 上篇帖子: python xlsxwriter 在 flask 中的使用 下篇帖子: python模拟登录带windows安全窗口网站 python 客户端
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表