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

'''
Created on Jun 19, 2013 @author: Berlin
'''
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()

还有问题存在,最终版本不在此共享!

最终版本主要改进:多线程上传与下载功能!

最新文章

  1. 《你不知道的JavaScript》整理(二)——this
  2. uicode编码解码
  3. 《Entity Framework 6 Recipes》中文翻译系列 (28) ------ 第五章 加载实体和导航属性之测试实体是否加载与显式加载关联实体
  4. [C++基础]关于对象的创建及内存分配
  5. (37) 在命令行调用API
  6. Android IOS WebRTC 音视频开发总结(七十)-- 移动端音视频技术优化的七个方向
  7. 在html中注释对 <include XXXXXXXX />是没有影响的
  8. yaffs2文件系统镜像分析
  9. Hibernate3.3用户手册摘要-1-辅助类,session
  10. MySQL锁机制
  11. 我和小美的撸码日记(1)之软件也需靠脸吃饭,带您做张明星脸(附后台经典框架 DEMO 下载)
  12. CSS3 布局
  13. [置顶] 和孩子们一起学Python编程
  14. Java容器---Map基础
  15. UVA 10382 - Watering Grass【贪心+区间覆盖问题+高精度】
  16. javaScript执行环境、作用域链与闭包
  17. winform 以不规则图形背景显示窗体
  18. Python基础:七、注释
  19. ios端滚动优化
  20. 序列化与Json

热门文章

  1. APP产品体验
  2. Windows 10下mysql 64位 安装(mysql-5.7.11-winx64安装)
  3. UIView和Masonry实现动画效果
  4. 面试题--JAVA中静态块、静态变量加载顺序
  5. Microsoft Sql server2005的安装步骤和常见问题解决方案
  6. 解决Errno::ENOENT: No Such File or Directory - Jekyll ~ Octopress and El Capitan
  7. 4个Linux服务器监控工具
  8. PyCharm如何配置断点调试功能
  9. python matplotlib 可视化操作实例
  10. 快学UiAutomator创建第一个实例