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数据类型转换函数总结
Mar 11 Python
python 读取excel文件生成sql文件实例详解
May 12 Python
python计算auc指标实例
Jul 13 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
浅述python中深浅拷贝原理
Sep 18 Python
Python中six模块基础用法
Dec 08 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
深入了解Python装饰器的高级用法
Aug 13 Python
Python容器类型公共方法总结
Aug 19 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
python playwrigh框架入门安装使用
Jul 23 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表单提交问题的解决方法
2011/04/12 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
PHP缓冲区用法总结
2016/02/14 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
python回调函数的使用方法
2014/01/23 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
python程序 创建多线程过程详解
2019/09/23 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
送给他或她的礼物:FUN.com
2018/08/17 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
心理健康心得体会
2014/01/02 职场文书
致跳高运动员广播稿
2014/01/13 职场文书
少先队入队活动方案
2014/02/08 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
Python中for后接else的语法使用
2021/05/18 Python
利用python进行数据加载
2021/06/20 Python
SQL Server实现分页方法介绍
2022/03/16 SQL Server
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫