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 相关文章推荐
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
Pycharm更换python解释器的方法
Oct 29 Python
浅谈Python反射 & 单例模式
Mar 21 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
Numpy之将矩阵拉成向量的实例
Nov 30 Python
pytorch中的自定义数据处理详解
Jan 06 Python
基于Tensorflow高阶读写教程
Feb 10 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
Python JSON常用编解码方法代码实例
Sep 05 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
理解JS绑定事件
2016/01/19 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
javascript获取select值的方法完整实例
2019/06/20 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
python实现的防DDoS脚本
2011/02/08 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Django中的session用法详解
2020/03/09 Python
python之语音识别speech模块
2020/09/09 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
优秀管理者事迹材料
2014/05/22 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
会议营销主持词
2015/07/03 职场文书
vue首次渲染全过程
2021/04/21 Vue.js