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中操作时间之mktime()方法的使用教程
May 22 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
Python实现绘制双柱状图并显示数值功能示例
Jun 23 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
python生成并处理uuid的实现方式
Mar 03 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
查看keras的默认backend实现方式
Jun 19 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
Python requests库参数提交的注意事项总结
Mar 29 Python
Python import模块的缓存问题解决方案
Jun 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
星际争霸任务指南——人族
2020/03/04 星际争霸
ajax在joomla中的原生态应用代码
2012/07/19 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
全面解析Vue中的$nextTick
2020/12/24 Vue.js
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
Python3常用内置方法代码实例
2019/11/18 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
你常见到的runtime exception
2016/09/05 面试题
信用卡工作证明模板
2014/09/14 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
学校德育工作总结2015
2015/05/11 职场文书
考试后的感想
2015/08/07 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
MongoDB支持的索引类型
2022/04/11 MongoDB