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实现的数据结构与算法之双端队列详解
Apr 22 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
django进阶之cookie和session的使用示例
Aug 17 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
Django学习笔记之为Model添加Action
Apr 30 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
Python 代码调试技巧示例代码
Aug 11 Python
python如何调用百度识图api
Sep 29 Python
Python txt文件如何转换成字典
Nov 03 Python
python实现简单的聊天小程序
Jul 07 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长字符串定义方法
2012/07/12 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
PHP读取Excel类文件
2017/05/15 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
Js中sort()方法的用法
2006/11/04 Javascript
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
浅析Python基础-流程控制
2016/03/18 Python
python编写简单爬虫资料汇总
2016/03/22 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
python 有效的括号的实现代码示例
2019/11/11 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
《天游峰的扫路人》教学反思
2014/04/25 职场文书
年终奖发放方案
2014/06/02 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
社区节水倡议书
2015/04/29 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL