Python中的FTP通信模块ftplib的用法整理


Posted in Python onJuly 08, 2016

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文件

实例

一个上传代码:
import socket
from ftplib import FTP
ftp_server='xx.xx.xx.xx'
ftp_user='xxxxx'
ftp_password='xxxxx'
ftp_backup_dir='backup'
 
newday = date.today()  #获取今天的日期
oldday = date.today()-timedelta(5)  #获得5天前的日期
newfile = '/home/backup/' + 'backup_data_' + str(newday.year) + '.' + str(newday.month) + '.' + str(newday.day) + '.zip'  #本次备份文件名(绝对路径)
oldfile = '/home/backup/' + 'backup_data_' + str(oldday.year) + '.' + str(oldday.month) + '.' + str(oldday.day) + '.zip'  #5天前备份的文件名(绝对路径)
 
def upload():
  socket.setdefaulttimeout(60)  #超时FTP时间设置为60秒
  ftp = FTP(ftp_server)
  print("login ftp...")
  try:
    ftp.login(ftp_user, ftp_password)
    print(ftp.getwelcome())  #获得欢迎信息
 
    try:
      if ftp_backup_dir in ftp.nlst():
        print("found backup folder in ftp server, upload processing.")
      else:
        print("don't found backup folder in ftp server, try to build it.")
        ftp.mkd(ftp_backup_dir)
    except:
      print("the folder" + ftp_backup_dir + "doesn't exits and can't be create!")
      sys.exit()
  except:
    print("ftp login failed.exit.")
    sys.exit()
  ftp.cwd(ftp_backup_dir)  #设置FTP路径
 
  print("upload data...")
  try:
    ftp.storbinary('STOR ' + os.path.basename(newfile), open(newfile,'rb'), 1024)  #上传备份文件
  except:
    print("upload failed. check your permission.")
  
  print("delte old file...")
  try:
    ftp.delete(os.path.basename(oldfile))  #删除5天前的备份文件
  except:
    print("the old file in ftp doesn't exists, jumped.")
 
  print("ftp upload successful.exit...")
  ftp.quit()
 
if __name__== '__main__':
  upload()
Python 相关文章推荐
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
Ubuntu下Python2与Python3的共存问题
Oct 31 Python
Python制作exe文件简单流程
Jan 24 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
用python计算文件的MD5值
Dec 23 Python
python引入其他文件夹下的py文件具体方法
May 23 Python
Pandas 稀疏数据结构的实现
Jul 25 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 #Python
Python中的os.path路径模块中的操作方法总结
Jul 07 #Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 #Python
Python的collections模块中的OrderedDict有序字典
Jul 07 #Python
Python的collections模块中namedtuple结构使用示例
Jul 07 #Python
详解Python的collections模块中的deque双端队列结构
Jul 07 #Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 #Python
You might like
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
php中日期加减法运算实现代码
2011/12/08 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
ini_set的用法介绍
2014/01/07 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
swtich/if...else的替代语句
2015/08/16 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
python采集微信公众号文章
2018/12/20 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
房地产融资计划书
2014/01/10 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
转让协议书范本
2014/09/13 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python