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写的贪吃蛇游戏例子
Jun 16 Python
Python面向对象编程中的类和对象学习教程
Mar 30 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
不要用强制方法杀掉python线程
Feb 26 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
python利用Tesseract识别验证码的方法示例
Jan 21 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
Python 如何对文件目录操作
Jul 10 Python
Python入门之使用pandas分析excel数据
May 12 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注入点构造代码
2008/06/14 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
20个PHP常用类库小结
2011/09/11 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
UI Events 用户界面事件
2012/06/27 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
Three.js基础学习教程
2017/11/16 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
Python数据可视化图实现过程详解
2020/06/12 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
"引用"与多态的关系
2013/02/01 面试题
成人教育自我鉴定
2013/11/01 职场文书
邹越演讲观后感
2015/06/15 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书