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的urllib库提交WEB表单
Feb 24 Python
Python二分法搜索算法实例分析
May 11 Python
Python的多态性实例分析
Jul 07 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
彻底搞懂Python字符编码
Jan 23 Python
python使用RNN实现文本分类
May 24 Python
django ajax json的实例代码
May 29 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
python3代码中实现加法重载的实例
Dec 03 Python
Numpy ndarray 多维数组对象的使用
Feb 10 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
使用php重新实现PHP脚本引擎内置函数
2007/03/06 PHP
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
了解Redis常见应用场景
2021/06/23 Redis
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python