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

1167次阅读  |  发布于5年以前

本文实例讲述了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) 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8