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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
Python中type的构造函数参数含义说明
Jun 21 Python
Python自动发邮件脚本
Mar 31 Python
Python上下文管理器和with块详解
Sep 09 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
pytorch自定义二值化网络层方式
Jan 07 Python
解决python-docx打包之后找不到default.docx的问题
Feb 13 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
Keras 使用 Lambda层详解
Jun 10 Python
python Scrapy爬虫框架的使用
Jan 21 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
python图片灰度化处理的几种方法
Jun 23 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长网址与短网址的实现方法
2017/10/13 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
AngularJS快速入门
2015/04/02 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
详解python单例模式与metaclass
2016/01/15 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
python模拟表单提交登录图书馆
2018/04/27 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
行政经理的岗位职责
2013/11/23 职场文书
骨干教师培训制度
2014/01/13 职场文书
门诊手术室工作制度
2014/01/30 职场文书
十一酒店活动方案
2014/02/20 职场文书
施工安全标语
2014/06/07 职场文书
铣工实训报告
2014/11/05 职场文书
召开会议通知范文
2015/04/15 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
background-position百分比原理详解
2021/05/08 HTML / CSS
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python