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写入数据到MP3文件中的方法
Jul 10 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
Nov 08 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
python处理两种分隔符的数据集方法
Dec 12 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
python中sort和sorted排序的实例方法
Aug 26 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 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和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
纯php生成随机密码
2015/10/30 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
一段实时更新的时间代码
2006/07/07 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
详解React中setState回调函数
2018/06/14 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
python赋值操作方法分享
2013/03/23 Python
python实现查询IP地址所在地
2015/03/29 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
工作时间证明
2015/06/15 职场文书
V Rising 服务器搭建图文教程
2022/06/16 Servers