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调用C语言开发的共享库方法实例
Mar 18 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
Python引用传值概念与用法实例小结
Oct 07 Python
python Crypto模块的安装与使用方法
Dec 21 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
详解django中使用定时任务的方法
Sep 27 Python
Python的垃圾回收机制详解
Aug 28 Python
python 画函数曲线示例
Dec 04 Python
python 实现按对象传值
Dec 26 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
几款Python编译器比较与推荐(小结)
Oct 15 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设计模式之结构模式的深入解析
2013/06/13 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
javascript引导程序
2008/10/26 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
JS前端加密算法示例
2016/12/22 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
python fabric使用笔记
2015/05/09 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
vivo智能手机官方商城:vivo
2016/09/22 全球购物
《小小竹排画中游》教学反思
2014/02/26 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
招标保密承诺书
2015/01/20 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers