博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python ftplib模块
阅读量:5836 次
发布时间:2019-06-18

本文共 6207 字,大约阅读时间需要 20 分钟。

函数释义

Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下

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()                        #退出ftpftp相关命令操作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.quit()与FTP.close()的区别

  • FTP.quit():发送QUIT命令给服务器并关闭掉连接。这是一个比较“缓和”的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。
  • FTP.close():单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在FTP.quit()之后。

例1:下载、上传文件

#coding: utf-8from ftplib import FTPimport timeimport tarfile#!/usr/bin/python#-*- coding: utf-8 -*-from ftplib import FTPdef ftpconnect(host, username, password):    ftp = FTP()    #ftp.set_debuglevel(2)         #打开调试级别2,显示详细信息    ftp.connect(host, 21)          #连接    ftp.login(username, password)  #登录,如果匿名登录则用空串代替即可    return ftp    def downloadfile(ftp, remotepath, localpath):    bufsize = 1024                #设置缓冲块大小    fp = open(localpath,'wb')     #以写模式在本地打开文件    ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize) #接收服务器上文件并写入本地文件    ftp.set_debuglevel(0)         #关闭调试    fp.close()                    #关闭文件def uploadfile(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-8from ctypes import *import osimport sysimport ftplibclass myFtp:    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 )                def Login(self, user, passwd):        self.ftp.login( user, passwd )        print self.ftp.welcome    def DownLoadFile(self, LocalFile, RemoteFile):        file_handler = open( LocalFile, 'wb' )        self.ftp.retrbinary( "RETR %s" %( RemoteFile ), file_handler.write )         file_handler.close()        return True        def UpLoadFile(self, LocalFile, RemoteFile):        if os.path.isfile( LocalFile ) == False:            return False        file_handler = open(LocalFile, "rb")        self.ftp.storbinary('STOR %s'%RemoteFile, file_handler, 4096)        file_handler.close()        return True    def UpLoadFileTree(self, LocalDir, RemoteDir):        if os.path.isdir(LocalDir) == False:            return False        print "LocalDir:", LocalDir        LocalNames = os.listdir(LocalDir)        print "list:", LocalNames        print RemoteDir        self.ftp.cwd( RemoteDir )        for Local in LocalNames:            src = os.path.join( LocalDir, Local)            if os.path.isdir( src ): self.UpLoadFileTree( src, Local )            else:                self.UpLoadFile( src, Local )                        self.ftp.cwd( ".." )        return        def DownLoadFileTree(self, LocalDir, RemoteDir):        print "remoteDir:", RemoteDir        if os.path.isdir( LocalDir ) == False:            os.makedirs( LocalDir )        self.ftp.cwd( RemoteDir )        RemoteNames = self.ftp.nlst()          print "RemoteNames", RemoteNames        print self.ftp.nlst("/del1")        for file in RemoteNames:            Local = os.path.join( LocalDir, file )            if self.isDir( file ):                self.DownLoadFileTree( Local, file )                            else:                self.DownLoadFile( Local, file )        self.ftp.cwd( ".." )        return        def show(self, list):        result = list.lower().split( " " )        if self.path in result and "
" in result: self.bIsDir = True def isDir(self, path): self.bIsDir = False self.path = path #this ues callback function ,that will change bIsDir value self.ftp.retrlines( 'LIST', self.show ) return self.bIsDir def close(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#from ftplib import FTPimport ftplibimport socketimport osdef ftpconnect(ftp_info):    try:        ftp = ftplib.FTP(ftp_info[0])    except (socket.error, socket.gaierror):        print "ERROR: cannot reach %s" % ftp_info[0]        return None    username = ftp_info[1]    passwd = ftp_info[2]    try:        ftp.login(username, passwd)    except ftplib.error_perm:        print "ERROR: cannot login anonymously"        ftp.quit()        return None    return ftpif __name__ == "__main__":    info_list = ["10.19.3.199", "fastupdate_amap", "@utonavi&A.map"]    ftp = ftpconnect(info_list)    if not ftp:        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")    except ftplib.error_perm:        try:            ftp.mkd("jimi")        except ftplib.error_perm:            print "WARNING: U have no authority to make dir"    finally:        ftp.quit()

ftp例子参考链接

转载地址:http://vgccx.baihongyu.com/

你可能感兴趣的文章
JavaScript 学习笔记— —Event(二)
查看>>
Google Code Jam 2010 Round 1A Problem A. Rotate
查看>>
iOS开发小技巧--图片的圆角处理
查看>>
第七章11
查看>>
Java语言基础组成——关键字,标识符,注释,常量和变量,运算符
查看>>
(三十六)类数组对象arguments
查看>>
空字符的类型转换
查看>>
小程序api请求层封装(Loading全局配置)
查看>>
Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程
查看>>
2.2 Python基础知识
查看>>
数据类型
查看>>
css对各个浏览器兼容技巧
查看>>
SqlBulkCopy使用介绍以及注意事项
查看>>
DS博客作业03--栈和队列
查看>>
前段基础之CSS
查看>>
上手Caffe(二)
查看>>
为Fragment增加新的生命周期,并实现管理
查看>>
Java虚拟机学习 - 类加载机制
查看>>
Ubuntu在命令行安装显卡驱动
查看>>
WPF Adorner学习(1)
查看>>