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获取指定目录下所有文件名列表的方法
May 20 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
python Pandas 读取txt表格的实例
Apr 29 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
Python3.5运算符操作实例详解
Apr 25 Python
vue常用指令代码实例总结
Mar 16 Python
python 字典item与iteritems的区别详解
Apr 25 Python
python随机模块random的22种函数(小结)
May 15 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 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添加xml文档内容的方法
2015/01/23 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
异步加载script的代码
2011/01/12 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
Vue入门之数据绑定(小结)
2018/01/08 Javascript
详解Python中的文本处理
2015/04/11 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
python匿名函数的使用方法解析
2019/10/10 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
Python使用re模块验证危险字符
2020/05/21 Python
演讲稿祖国在我心中
2014/05/04 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
五四演讲稿范文
2014/09/03 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
楚门的世界观后感
2015/06/03 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫