网络编程
位置:首页>> 网络编程>> Python编程>> Python实现FTP上传文件或文件夹实例(递归)

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

作者:xudacheng06  发布时间:2021-11-21 06:05:30 

标签: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)
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com