• 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)
  • 相关阅读:
    移动应用跨平台之旅
    ReactNative之坑爹的在线安装
    关于拆箱装箱引发的类型转换报错
    Unity HDR (高动态范围 )
    Instruments如何看Mono内存分配
    Unity编辑器崩溃大全
    Unity3D获取手机存储空间
    关于构建AssetBundle哈希冲突的问题
    关于UnityWebRequest的超时讨论
    Wwise音频插件介绍
  • 原文地址:https://www.cnblogs.com/APeng2019/p/10719306.html
Copyright © 2020-2023  润新知