python实现FTP循环上传文件


Posted in Python onMarch 20, 2020

本文实例为大家分享了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)

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

Python 相关文章推荐
python实现根据月份和日期得到星座的方法
Mar 27 Python
Python 中的 else详解
Apr 23 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
python中for用来遍历range函数的方法
Jun 08 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
基于python生成器封装的协程类
Mar 20 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
Python networkx包的实现
Feb 14 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
python实现ftp文件传输功能
Mar 20 #Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 #Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 #Python
python实现ftp文件传输系统(案例分析)
Mar 20 #Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 #Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 #Python
Python文件操作基础流程解析
Mar 19 #Python
You might like
MySQL授权问题总结
2007/05/06 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
php中switch语句用法详解
2015/08/17 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
原生js实现轮播图
2017/02/27 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
js实现随机数小游戏
2019/06/28 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
群众路线批评与自我批评
2014/02/06 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2014年网管工作总结
2014/12/11 职场文书
党员示范岗材料
2014/12/19 职场文书
语文教师求职信范文
2015/03/20 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
个人借条范本
2015/05/25 职场文书
学校体育节班级口号
2015/12/25 职场文书
Python进行区间取值案例讲解
2021/08/02 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS