python实现下载整个ftp目录的方法


Posted in Python onJanuary 17, 2017

前言

最近因为业务需求,就写了这个脚本,脚本完成的任务是从FTP上下载一个目录,大家都知道从FTP上下载一个文件可用用get命令,下载多个文件可以用mget,但你要下载一个目录,对不起,不能,如果非要较劲,你说用lftp,然后用mirror命令也可以呀,这个我不较真,因为每个公司有每个公司的场景,选择合适的就行,因为我们这的FTP都是用ssl的,所以lftp就不能用了,脚本基本思路是建立ftp连接,然后登陆获取文件列表,根据返回的列表进行for循环,一个一个下载。

脚本如下:

#!/usr/bin/evn python
 
from ftplib import FTP_TLS, FTP
import socket
import ssl
import os
import sys
 
class IMPLICIT_FTP_TLS(FTP_TLS):
 #构造函数初始化父类
 def __init__(self, host='', user='', passwd='', acct='', keyfile=None,
  certfile=None, timeout=60):
  FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, timeout)
 #建立服务器的FTPS连接
 def connect(self, host='', port=0, timeout=-999):
  if host != '':
   self.host = host
  if port > 0:
   self.port = port
  if timeout != -999:
   self.timeout = timeout
  try:
   #创建socket
   self.sock = socket.create_connection((self.host, self.port), self.timeout)
   self.af = self.sock.family
   #wrap_socket接收一个socket实例,返回SSLSocket实例,可以理解在普通socket上封装了一层ssl
   self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile)
   self.file = self.sock.makefile('rb')
   self.welcome = self.getresp()
  except Exception as e:
   print (e)
  return self.welcome
 
 
def get_ftp_ver(version):
 #如果没有这个目录就新建
 if not os.path.isdir(version):
  os.makedirs(version)
 ftps = IMPLICIT_FTP_TLS()
 ftps.connect(host='10.0.0.8', port=666)
 ftps.login(user="ftp_user", passwd="ftp_password")
 #建立安全的数据连接,之后才能返回数据。
 ftps.prot_p()
 ftps.cwd(version)
 files = ftps.nlst()
 #进入本地目录
 os.chdir(version)
 #循环下载每个文件
 for file in files:
  fp = open(file, 'wb')
  ftps.retrbinary('RETR %s' % file, fp.write)
 ftps.close()
 
if __name__ == '__main__':
 get_ftp_ver(sys.argv[1])

脚本使用:

#python get_data.py version_20160920

后面跟的参数基本就是研发提供给你要更新的文件名称,然后运行就可以下载整个目录中的文件,脚本其它内容大家看注释就会明白。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
python检测lvs real server状态
Jan 22 Python
python单元测试unittest实例详解
May 11 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
简析Python的闭包和装饰器
Feb 26 Python
Python 实现随机数详解及实例代码
Apr 15 Python
3分钟学会一个Python小技巧
Nov 23 Python
简单了解python的break、continue、pass
Jul 08 Python
python分割一个文本为多个文本的方法
Jul 22 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
python正则表达式实例代码
Mar 03 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
Elasticsearch 索引操作和增删改查
Apr 19 Python
ansible作为python模块库使用的方法实例
Jan 17 #Python
python 基础教程之Map使用方法
Jan 17 #Python
Python获取某一天是星期几的方法示例
Jan 17 #Python
Python正则表达式匹配中文用法示例
Jan 17 #Python
python下如何查询CS反恐精英的服务器信息
Jan 17 #Python
python基础教程之匿名函数lambda
Jan 17 #Python
python基础教程之Filter使用方法
Jan 17 #Python
You might like
PHP面向对象分析设计的经验原则
2008/09/20 PHP
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
WAF的正确bypass
2017/01/05 PHP
PHP之header函数详解
2021/03/02 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
jquery实现动态画圆
2014/12/04 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
JS实现轮播图效果
2020/01/11 Javascript
python回调函数用法实例分析
2015/05/09 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
python文件和文件夹复制函数
2020/02/07 Python
python os.rename实例用法详解
2020/12/06 Python
英国大码女性时装零售商:Evans
2018/08/29 全球购物
派出所正风肃纪剖析材料
2014/10/10 职场文书
铣工实训报告
2014/11/05 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL