编写Python脚本来实现最简单的FTP下载的教程


Posted in Python onMay 04, 2015

访问FTP,无非两件事情:upload和download,最近在项目中需要从ftp下载大量文件,然后我就试着去实验自己的ftp操作类,如下(PS:此段有问题,别复制使用,可以参考去试验自己的ftp类!)

import os
from ftplib import FTP
 
class FTPSync():
  def __init__(self, host, usr, psw, log_file):
    self.host = host
    self.usr = usr
    self.psw = psw
    self.log_file = log_file
   
  def __ConnectServer(self):
    try:
      self.ftp = FTP(self.host)
      self.ftp.login(self.usr, self.psw)
      self.ftp.set_pasv(False)
      return True
    except Exception:
      return False
   
  def __CloseServer(self):
    try:
      self.ftp.quit()
      return True
    except Exception:
      return False
   
  def __CheckSizeEqual(self, remoteFile, localFile):
    try:
      remoteFileSize = self.ftp.size(remoteFile)
      localFileSize = os.path.getsize(localFile)
      if localFileSize == remoteFileSize:
        return True
      else:
        return False
    except Exception:
      return None
     
  def __DownloadFile(self, remoteFile, localFile):
    try:
      self.ftp.cwd(os.path.dirname(remoteFile))
      f = open(localFile, 'wb')
      remoteFileName = 'RETR ' + os.path.basename(remoteFile)
      self.ftp.retrbinary(remoteFileName, f.write)
       
      if self.__CheckSizeEqual(remoteFile, localFile):
        self.log_file.write('The File is downloaded successfully to %s' + '\n' % localFile)
        return True
      else:
        self.log_file.write('The localFile %s size is not same with the remoteFile' + '\n' % localFile)
        return False
    except Exception:
      return False
   
  def __DownloadFolder(self, remoteFolder, localFolder):
    try:
      fileList = []
      self.ftp.retrlines('NLST', fileList.append)
      for remoteFile in fileList:
        localFile = os.path.join(localFolder, remoteFile)
        return self.__DownloadFile(remoteFile, localFile)
    except Exception:
      return False
   
  def SyncFromFTP(self, remoteFolder, localFolder):
    self.__DownloadFolder(remoteFolder, localFolder)
    self.log_file.close()
    self.__CloseServer()
Python 相关文章推荐
举例介绍Python中的25个隐藏特性
Mar 30 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
python计算导数并绘图的实例
Feb 29 Python
Django 返回json数据的实现示例
Mar 05 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
Python下线程之间的共享和释放示例
May 04 #Python
简单介绍Python中利用生成器实现的并发编程
May 04 #Python
简单分析Python中用fork()函数生成的子进程
May 04 #Python
python实现从字典中删除元素的方法
May 04 #Python
Python中利用原始套接字进行网络编程的示例
May 04 #Python
python通过索引遍历列表的方法
May 04 #Python
python实现将元祖转换成数组的方法
May 04 #Python
You might like
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP中常用的魔术方法
2017/04/28 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
Python中使用logging模块打印log日志详解
2015/04/05 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
python使用psutil模块获取系统状态
2016/08/27 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
Python中GIL的使用详解
2018/10/03 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
python图片合成的示例
2020/11/09 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
为什么要使用servlet
2016/01/17 面试题
优秀团员事迹材料1500字
2014/08/31 职场文书
三八妇女节标语
2014/10/09 职场文书
运动会运动员赞词
2015/07/22 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库