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使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
Python中List.count()方法的使用教程
May 20 Python
python线程、进程和协程详解
Jul 19 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
python中实现精确的浮点数运算详解
Nov 02 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
Python同时迭代多个序列的方法
Jul 28 Python
python中_del_还原数据的方法
Dec 09 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 08 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异步执行的详解
2013/06/03 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
连接Python程序与MySQL的教程
2015/04/29 Python
用Python编写简单的定时器的方法
2015/05/02 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
教师通用专业自荐书范文
2014/02/11 职场文书
竞赛口号大全
2014/06/16 职场文书
力克胡哲观后感
2015/06/10 职场文书
海底两万里读书笔记
2015/06/26 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
关于python中模块和重载的问题
2021/11/02 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python