编写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使用reportlab画图示例(含中文汉字)
Dec 03 Python
python通过加号运算符操作列表的方法
Jul 28 Python
python如何统计序列中元素
Jul 31 Python
Python实现随机漫步功能
Jul 09 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
python或C++读取指定文件夹下的所有图片
Aug 31 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
python使用多线程查询数据库的实现示例
Aug 17 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 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.NET的入门教程
2006/10/09 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
索趣科技的答案
2007/02/07 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
JS实现星星海特效
2019/12/24 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
django输出html内容的实例
2018/05/27 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
绝对经典成功的大学生推荐信
2013/11/08 职场文书
土木工程毕业生自荐信
2013/11/12 职场文书
保护环境建议书
2014/03/12 职场文书
房屋公证委托书
2014/04/03 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python