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实现按行切分文本文件的方法
Apr 18 Python
详解Python实现按任意键继续/退出的功能
Aug 19 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
Django文件存储 默认存储系统解析
Aug 02 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
python自动发微信监控报警
Sep 06 Python
Python imread、newaxis用法详解
Nov 04 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
Pandas加速代码之避免使用for循环
May 30 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
8个PHP程序员常用的功能汇总
2014/12/18 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
JSON 数据格式详解
2017/09/13 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
肯尼迪就职演说稿
2013/12/31 职场文书
医药工作岗位求职信分享
2013/12/31 职场文书
八项规定整改措施
2014/02/12 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
单位婚育证明范本
2014/11/21 职场文书
爱心募捐感谢信
2015/01/22 职场文书
出生证明范本
2015/06/15 职场文书