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中的一些高级编程技巧
Apr 02 Python
python实现从ftp服务器下载文件的方法
Apr 30 Python
Python类的用法实例浅析
May 27 Python
Python可变参数函数用法实例
Jul 07 Python
python实现按行切分文本文件的方法
Apr 18 Python
Python 装饰器使用详解
Jul 29 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
python requests post多层字典的方法
Dec 27 Python
Flask-WTF表单的使用方法
Jul 12 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
python3排序的实例方法
Oct 20 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
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
php实现通过ftp上传文件
2015/06/19 PHP
php微信开发之关注事件
2018/06/14 PHP
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
vue实现购物车加减
2020/05/30 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python散点图实例之随机漫步
2018/08/27 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
pytorch的batch normalize使用详解
2020/01/15 Python
python实现自动打卡的示例代码
2020/10/10 Python
Python类的继承super相关原理解析
2020/10/22 Python
HTML5之语义标签介绍
2016/07/07 HTML / CSS
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
宿舍保安职务说明书
2014/02/25 职场文书
合作投资意向书
2014/04/01 职场文书
调研座谈会发言材料
2014/08/23 职场文书
商业用房租赁协议书
2014/10/13 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
个人向公司借款协议书
2016/03/19 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
Python学习之时间包使用教程详解
2022/03/21 Python