Python实现FTP上传文件或文件夹实例(递归)


Posted in Python onJanuary 16, 2017

本文实例讲述了Python实现FTP上传文件或文件夹实例。分享给大家供大家参考。具体如下:

import sys 
import os 
import json 
from ftplib import FTP 
 
_XFER_FILE = 'FILE' 
_XFER_DIR = 'DIR' 
 
class Xfer(object): 
  ''''' 
  @note: upload local file or dirs recursively to ftp server 
  ''' 
  def __init__(self): 
    self.ftp = None 
   
  def __del__(self): 
    pass 
   
  def setFtpParams(self, ip, uname, pwd, port = 21, timeout = 60):     
    self.ip = ip 
    self.uname = uname 
    self.pwd = pwd 
    self.port = port 
    self.timeout = timeout 
   
  def initEnv(self): 
    if self.ftp is None: 
      self.ftp = FTP() 
      print '### connect ftp server: %s ...'%self.ip 
      self.ftp.connect(self.ip, self.port, self.timeout) 
      self.ftp.login(self.uname, self.pwd)  
      print self.ftp.getwelcome() 
   
  def clearEnv(self): 
    if self.ftp: 
      self.ftp.close() 
      print '### disconnect ftp server: %s!'%self.ip  
      self.ftp = None 
   
  def uploadDir(self, localdir='./', remotedir='./'): 
    if not os.path.isdir(localdir):  
      return 
    self.ftp.cwd(remotedir)  
    for file in os.listdir(localdir): 
      src = os.path.join(localdir, file) 
      if os.path.isfile(src): 
        self.uploadFile(src, file) 
      elif os.path.isdir(src): 
        try:  
          self.ftp.mkd(file)  
        except:  
          sys.stderr.write('the dir is exists %s'%file) 
        self.uploadDir(src, file) 
    self.ftp.cwd('..') 
   
  def uploadFile(self, localpath, remotepath='./'): 
    if not os.path.isfile(localpath):  
      return 
    print '+++ upload %s to %s:%s'%(localpath, self.ip, remotepath) 
    self.ftp.storbinary('STOR ' + remotepath, open(localpath, 'rb')) 
   
  def __filetype(self, src): 
    if os.path.isfile(src): 
      index = src.rfind('\\') 
      if index == -1: 
        index = src.rfind('/')         
      return _XFER_FILE, src[index+1:] 
    elif os.path.isdir(src): 
      return _XFER_DIR, ''     
   
  def upload(self, src): 
    filetype, filename = self.__filetype(src) 
     
    self.initEnv() 
    if filetype == _XFER_DIR: 
      self.srcDir = src       
      self.uploadDir(self.srcDir) 
    elif filetype == _XFER_FILE: 
      self.uploadFile(src, filename) 
    self.clearEnv()  
         
 
if __name__ == '__main__': 
  srcDir = r"C:\sytst" 
  srcFile = r'C:\sytst\sar.c' 
  xfer = Xfer() 
  xfer.setFtpParams('192.x.x.x', 'jenkins', 'pass') 
  xfer.upload(srcDir)   
  xfer.upload(srcFile)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python判断IP地址合法性的方法实例
Mar 13 Python
Python简单实现enum功能的方法
Apr 25 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
python 列表推导式使用详解
Aug 29 Python
Python selenium的基本使用方法分析
Dec 21 Python
Django中的session用法详解
Mar 09 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
实例代码讲解Python 线程池
Aug 24 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
详解如何修改python中字典的键和值
Sep 29 Python
Python Socket传输文件示例
Jan 16 #Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 #Python
python一键升级所有pip package的方法
Jan 16 #Python
centos6.7安装python2.7.11的具体方法
Jan 16 #Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 #Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 #Python
python 根据pid杀死相应进程的方法
Jan 16 #Python
You might like
如何写php程序?
2006/12/08 PHP
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
PHP防盗链代码实例
2014/08/27 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
JavaScript Sort 表格排序
2009/10/31 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
python如何实现异步调用函数执行
2019/07/08 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python列表推导式入门学习解析
2019/12/02 Python
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
模具专业推荐信
2013/10/30 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
大学军训感言1500字
2014/03/09 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
数据库连接池
2021/04/06 MySQL