zoukankan      html  css  js  c++  java
  • 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:UsersAdministratorDownloadsFTPsmp'
        transmitter = Transmitter()
        transmitter.setFtpParams('10.44.0.2', 'admin', '123123')
    
        while True:
            transmitter.upload(srcDir)
            sleep(4)
  • 相关阅读:
    20181127-1附加作业 软件工程原则的应用实例
    20181120-1每周例行报告
    20181113-2 每周例行报告
    20181030-4每周例行报告
    20181023-3 每周例行报告
    20181016-10 每周例行报告
    百度笔试题
    字节跳动笔试题
    安装pyltp安装包出现: error: command 'D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe' failed with exit status 2
    软件评测师复习经验谈
  • 原文地址:https://www.cnblogs.com/APeng2019/p/10719306.html
Copyright © 2011-2022 走看看