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

 更新时间:2017年01月16日 16:15:36   作者:xudacheng06  
本篇文章主要介绍了Python实现FTP上传文件或文件夹实例(递归),具有一定的参考价值,有兴趣的可以了解一下。

本文实例讲述了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爬取百度翻译实现中英互译功能

    这篇文章主要介绍了利用Python爬虫爬取百度翻译,从而实现中英文互译的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-01-01
  • 基于Python实现简单的人脸识别系统

    基于Python实现简单的人脸识别系统

    这篇文章主要介绍了如何通过Python实现一个简单的人脸识别系统,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以跟随小编一起试一试
    2022-01-01
  • python字典按照value排序方法

    python字典按照value排序方法

    在本篇文章里小编给各位分享一篇关于python字典按照value排序方法的相关文章,有兴趣的朋友们可以学习下。
    2020-12-12
  • 详解Python中的动态属性和特性

    详解Python中的动态属性和特性

    本篇文章主要介绍了详解Python中的动态属性和特性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 使用 Celery Once 来防止 Celery 重复执行同一个任务

    使用 Celery Once 来防止 Celery 重复执行同一个任务

    这篇文章主要介绍了使用 Celery Once 来防止 Celery 重复执行同一个任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • pandas DataFrame 行列索引及值的获取的方法

    pandas DataFrame 行列索引及值的获取的方法

    这篇文章主要介绍了pandas DataFrame 行列索引及值的获取的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python的pdb调试命令的命令整理及实例

    python的pdb调试命令的命令整理及实例

    这篇文章主要介绍了python的pdb调试命令的命令整理及实例的相关资料,需要的朋友可以参考下
    2017-07-07
  • python接口自动化之正则用例参数化的示例详解

    python接口自动化之正则用例参数化的示例详解

    这篇文章主要介绍了python接口自动化之正则用例参数化,它是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python最好的日期处理库pendulum的使用指南

    Python最好的日期处理库pendulum的使用指南

    关于日期处理,Python 提供了很多的库,比如标准库 datetime、第三方库 dateutil、arrow 等等。本文将为大家介绍一个小编最喜欢的库 pendulum,用起来可以说非常的方便,任何对日期的操作它都能满足
    2022-07-07
  • 还不知道Anaconda是什么?读这一篇文章就够了

    还不知道Anaconda是什么?读这一篇文章就够了

    Anaconda指的是一个开源的Python发行版本,其包含了Conda、Python等180多个科学包及其依赖项,下面这篇文章主要给大家介绍了关于Anaconda是什么的相关资料,需要的朋友可以参考下
    2023-02-02

最新评论