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获得linux下所有挂载点(mount points)的方法
Apr 29 Python
通过Python来使用七牛云存储的方法详解
Aug 07 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
Python多线程原理与用法实例剖析
Jan 22 Python
pycharm修改file type方式
Nov 19 Python
如何使用python代码操作git代码
Feb 29 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
在keras中实现查看其训练loss值
Jun 16 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python实现三种随机请求头方式
Jan 05 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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 日期时间处理函数小结
2009/12/18 PHP
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
php下保存远程图片到本地的办法
2010/08/08 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
jquery对表单操作2
2011/04/06 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
举例讲解Python中的算数运算符的用法
2015/05/13 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
Python内置函数property()如何使用
2020/09/01 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
积极分子思想汇报
2014/01/04 职场文书
食品安全检查制度
2014/02/03 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang