python中默认安装的ftplib模块定义了ftp类,可以用于实现简单的文件上传及下载功能
1.ftplib中的主要功能模块
from ftplib import FTP #加载ftp模块
ftp=FTP() #设置变量
ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.set_debuglevel(0) #关闭调试模式
ftp.connect("IP","port") #连接的ftp sever和端口
ftp.login("user","password") #连接的用户名,密码
ftp.getwelcome() #打印出欢迎信息
ftp.cmd("xxx/xxx") #进入远程目录
ftp.quit() #退出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.storbinary("STOR filename.txt",file_handel,bufsize) #上传目标文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize) #下载FTP文件
ftp.size(filename) #获取文件大小(字节)
ftp.delete(filename) #删除服务器上的文件
FTP.quit()与FTP.close()的区别
FTP.quit():发送QUIT命令给服务器并关闭掉连接。这是一个比较“缓和”的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。
FTP.close():单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在FTP.quit()之后。
2.下载文件,封装成FTPDownload类
#!/usr/bin/python
#-*- coding: utf-8 -*-
from ftplib import FTP
class ftpDownload:
client = None
def __init__(self, host, user, pwd, port=21):
self.host = host
self.port = port
self.user = user
self.pwd = pwd
self.client = None
def connect(self): # 连接FTP
client = ftplib.FTP()
client.connect(self.host, self.port, timeout=30)
client.login(self.user, self.pwd)
self.client = client
def cwd(self,ftpPath):
self.client.cwd(ftpPath)
def download(self,localfolder,filename): # localfolder: 下载到本地的文件夹,filename;共享文件夹里需要下载的文件名
bufsize = 1024 # 设置缓冲块的大小,个人觉得此参数在客户端处表现的不是特别有效果
localfolder_filename=os.path.join(localfolder,filename)# 拼接下载到本地的'文件'路径字符串
localfile = open(localfolder_filename,'wb') # 以写的模式在本地打开文件
self.client.retrbinary('RETR %s' % filename,localfile.write,bufsize)# 下载文件
def quit(self):
self.client.quit() # 退出
ftp = ftpDownload(host=ip, user=user, pwd=pwd) # ftp客户端连接时所需的ip,用户名,密码
ftp.connect() # 连接
ftp.cwd(ftpPath) # 进入共享文件夹目录 'xx/xx'
ftp.download(localfolder,filename) # 下载
ftp.quit() # 退出
3.上传文件,封装成FTPDownload类
class ftpUpload:
client = None
def __init__(self, host, user, pwd, port=21):
self.host = host
self.port = port
self.user = user
self.pwd = pwd
self.client = None
def connect(self): # 连接FTP
client = ftplib.FTP()
client.connect(self.host, self.port, timeout=30)
client.login(self.user, self.pwd)
self.client = client
def cwd(self,ftpPath):
self.client.cwd(ftpPath)
def UpLoadFile(self, LocalFile, RemoteFile):
bufsize = 1024 # 设置缓冲块的大小,个人觉得此参数在客户端处表现的不是特别有效果
if os.path.isfile( LocalFile ) == False: # 判断LocalFile是否为文件
return False
file_handler = open(LocalFile, "rb") # 以读的方式打开文件
self.client.storbinary('STOR %s'%RemoteFile,file_handler)
ftp = ftpDownload(host=ip, user=user, pwd=pwd) # ftp客户端连接时所需的ip,用户名,密码
ftp.connect() # 连接
ftp.cwd(ftpPath) # 进入共享文件夹目录 'xx/xx'
ftp.download(LocalFile,RemoteFile) # 上传 LocalFile:本地需要上传的文件路径 RemoteFile:上传后的文件名
ftp.quit() # 退出