编写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 相关文章推荐
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
python对文件的操作方法汇总
Feb 28 Python
pip安装tensorflow的坑的解决
Apr 19 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 Python
Python 阶乘详解
Oct 05 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
php实现的树形结构数据存取类实例
2014/11/29 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Python自动扫雷实现方法
2015/07/25 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
python简单实现最大似然估计&scipy库的使用详解
2020/04/15 Python
Python对excel的基本操作方法
2021/02/18 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
澳大利亚相机之家:Camera House
2017/11/30 全球购物
关键在于落实心得体会
2014/09/03 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
学生评语集锦
2015/01/04 职场文书
比较node.js和Deno
2021/04/27 Javascript
Go Plugins插件的实现方式
2021/08/07 Golang
你真的会用Mysql的explain吗
2022/03/31 MySQL