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生成pdf文件的方法
Aug 04 Python
python基于socket实现网络广播的方法
Apr 29 Python
Python3.2模拟实现webqq登录
Feb 15 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
python3实现小球转动抽奖小游戏
Apr 15 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
Python Pandas数据中对时间的操作
Jul 30 Python
Python 中判断列表是否为空的方法
Nov 24 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 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
综合图片计数器
2006/10/09 PHP
DedeCms模板安装/制作概述
2007/03/11 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python实现指定字符串补全空格的方法
2015/04/30 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
财务分析个人的自荐书范文
2013/11/24 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
表决心的诗句大全
2014/03/11 职场文书
学习交流会主持词
2014/04/01 职场文书
实习协议书范本
2014/04/22 职场文书
取保候审保证书
2014/04/30 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python