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

yipeiwu_com6年前Python基础

本文实例讲述了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 MySQLdb使用教程详解

python MySQLdb使用教程详解

本文主要内容python MySQLdb数据库批量插入insert,更新update的: 1.python MySQLdb的使用,写了一个基类让其他的sqldb继承这样比较方便,数据库的...

Python简单操作sqlite3的方法示例

本文实例讲述了Python简单操作sqlite3的方法。分享给大家供大家参考,具体如下: import sqlite3 def Test1(): #con =sqlite3.co...

python实现本地批量ping多个IP的方法示例

本文主要利用python的相关模块进行批量ping ,测试IP连通性。 下面看具体代码(python3): ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:8...

PyQt5 QSerialPort子线程操作的实现

环境: python3.6 pyqt5 只是简单的一个思路,请忽略脆弱的异常防护: # -*- coding: utf-8 -*- import sys from PyQt5....

Python中django学习心得

Python中django学习心得

以下是作者在学习Python中django框架时的学习笔记,并把测试的代码做了详细分析,最后还附上了学习心得,值得大家学习。 URL配置(URLconf)就像Django 所支撑网站的目...