1. 程式人生 > 程式設計 >python實現FTP迴圈上傳檔案

python實現FTP迴圈上傳檔案

本文例項為大家分享了python實現FTP迴圈上傳檔案的具體程式碼,供大家參考,具體內容如下

測試過程中,有時會用到FTP的資料流,或者需要使用FTP反覆上傳檔案,所以寫了一個FTP迴圈上傳檔案的python程式碼。

程式碼如下:

#coding=utf-8

import sys
import os
from ftplib import FTP
from time import sleep

_XFER_FILE = 'FILE'
_XFER_DIR = 'DIR'


class Transmitter(object): # 注意:遞迴上傳本地檔案或dirs到ftp伺服器

  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('### 連線FTP伺服器: %s ...' % self.ip)
      self.ftp.connect(self.ip,self.port,self.timeout)
      self.ftp.login(self.uname,self.pwd)

  def clearEnv(self):
    if self.ftp:
      self.ftp.close()
      print('### 斷開FTP伺服器: %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('目錄存在 %s' % file)
        self.uploadDir(src,file)
    self.ftp.cwd('..')

  def uploadFile(self,localpath,remotepath='./'):
    if not os.path.isfile(localpath):
      return
    print('+++ 上傳 %s to %s:%s' % (localpath,self.ip,remotepath))
    self.ftp.storbinary('STOR ' + remotepath,open(localpath,'rb'))
    sleep(0.5)
    try:
      self.ftp.delete(remotepath)
    except:
      pass
    # del file when uploaded this file
    # os.remove(localpath)
    # sleep(1)

  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:\Users\Administrator\Downloads\FTP\smp'
  transmitter = Transmitter()
  transmitter.setFtpParams('10.44.0.2','admin','123123')

  while True:
    transmitter.upload(srcDir)
    sleep(4)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。