pytnon FTP编程:Python自带ftplib 模块,是用来对FTP服务器进行上传、下载操作,非常方便,使用起来也是行简单。
如果我们熟悉了下面代码编写,怎么把FTP服务器上的文件下载到本地,怎么把文件上传到FTP服务器上和批量FTP上传、下载
就基本掌握了Python FTP编程。
#-*- coding:utf-8 -*- #author:lhj588@live.cn #C_Date: 2011.11.17 from ftplib import FTP import socket import os #ftp服务器地址 ftp_server = '127.0.0.1' #ftp服务器端口 ftp_port ='5433' #ftp服务器登录名称 user_name = 'lhj588' #ftp服务器登录密码 password = '888888' """ 描述:描述:简单FTP文件下载 """ def upload_ftp(): ftp = FTP() #打开调试级别2,显示详细信息 ftp.set_debuglevel(2) #连接FTP服务器 ftp.connect(ftp_server,ftp_port) #登录FTP服务器 如果匿名登录则用空串代替即可 ftp.login(user_name,password) #显示FTP服务器欢迎信息 print ftp.getwelcome() dir_name = "/mysoft/tool/" #选择要上传文件存放服务器的目录 ftp.cwd(dir_name) #设置缓冲块大小 buf_size = 1024 #文件名称 file_name = "test.jpg" #以写模式在本地打开文件 f_handler = open(file_name,'wb').write() #接收FTP服务器上文件并写入本地 ftp.retrbinary("RETR test.jpg",f_handler,buf_size) #关闭调试 ftp.set_debuglevel(0) #退出FTP服务器 ftp.quit() """ 描述:简单FTP文件上传 """ def down_ftp(): ftp = FTP() #打开调试级别2,显示详细信息 ftp.set_debuglevel(2) #连接FTP服务器 ftp.connect(ftp_server,ftp_port) #登录FTP服务器 如果匿名登录则用空串代替即可 ftp.login(user_name,password) print ftp.getwelcome() dir_name = "/mysoft/tool/" ftp.cwd(dir_name) buf_size = 1024 file_name = 'test.jpg' #以读模式在本地打开文件 f_handler = open(file_name,'rb') #上传文件 ftp.storbinary('STOR server_test.jpg',f_handler,buf_size) #关闭调试 ftp.set_debuglevel(0) #关闭文件 f_handler.close() #退出FTP服务器 ftp.quit() """ 描述:登录到FTP站点:ftp_server,并到tarDirTemp目录下下载fileNameTempList列表中的文件 参数:ftp_server:ftp站点名称 user_name:ftp登录名 password:ftp密码 tarDirTemp:下载的目标绝对目录 fileNameTempList:要下载的文件全名列表 返回值:输出:成功:0 失败:1 """ def down_ftp_file(ftp_server, user_name, password, tarDirTemp,fileNameTempList): try: ftp = FTP(ftp_server) ftp.login(user_name, password) ftp.cwd(tarDirTemp) ftp.set_debuglevel(2) except socket.error as errobj: print 'fpt error: %s can\'t download directory\'s file %s' % (errobj, tarDirTemp) return False for filename in fileNameTempList: try: #以写模式在本地打开文件 fp = open(filename, 'wb') #从FTP中下载文件 ftp.retrbinary('RETR '+filename, fp.write, 1024) except IOError as ioerr: print 'Error: [%s] %s' % (ioerr.errno, ioerr.strerror) return False except FTP.all_errors as errobj: print 'fpt error: [%s] %s' % (errobj, filename) if os.path.isfile(filename): os.system('rm -f ' + filename) continue ftp.close() return True """ 描述:测试方法 """ if __name__=="__main__": upload_ftp() down_ftp() down_ftp_file(ftp_server,user_name,password,"/mysoft/tool/",['1.jpg','2.jpg','3.jpg'])
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编程 from ftplib import FTP ftp = FTP() timeout = 30 port = 21 ftp.connect('192.168.1.188',port,timeout ) # 连接FTP服务器 ftp.login('UserName','888888' ) # 登录 print ftp.getwelcome () # 获得欢迎信息 ftp.cwd('file/test' ) # 设置FTP路径 list = ftp.nlst () # 获得目录列表 for name in list: print(name) # 打印文件名字 path = 'd:/data/' + name # 文件保存路径 f = open(path,'wb') # 打开要保存文件 filename = 'RETR ' + name # 保存FTP文件 ftp.retrbinary(filename,f.write ) # 保存FTP上的文件 ftp.delete(name ) # 删除FTP文件 ftp.storbinary('STOR '+filename, open(path, 'rb')) # 上传FTP文件 ftp.quit () # 退出FTP服务器
#!/usr/bin/python # -*- coding: utf-8 -*- import ftplib import os import socket HOST = 'ftp.mozilla.org' DIRN = 'pub/mozilla.org/webtools' FILE = 'bugzilla-3.6.7.tar.gz' def main(): try: f = ftplib.FTP(HOST) except (socket.error, socket.gaierror): print 'ERROR:cannot reach " %s"' % HOST return print '***Connected to host "%s"' % HOST try: f.login() except ftplib.error_perm: print 'ERROR: cannot login anonymously' f.quit() return print '*** Logged in as "anonymously"' try: f.cwd(DIRN) except ftplib.error_perm: print 'ERRORL cannot CD to "%s"' % DIRN f.quit() return print '*** Changed to "%s" folder' % DIRN try: #传一个回调函数给retrbinary() 它在每接收一个二进制数据时都会被调用 f.retrbinary('RETR %s' % FILE, open(FILE, 'wb').write) except ftplib.error_perm: print 'ERROR: cannot read file "%s"' % FILE os.unlink(FILE) else: print '*** Downloaded "%s" to CWD' % FILE f.quit() return if __name__ == '__main__': main()
- 本文固定链接: http://ttfde.top/index.php/post/302.html
- 转载请注明: admin 于 TTF的家园 发表
《本文》有 0 条评论