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深入学习之闭包
Aug 31 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
python定时器(Timer)用法简单实例
Jun 04 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python之yield和Generator深入解析
Sep 18 Python
简单了解django文件下载方式
Feb 10 Python
python实现人脸签到系统
Apr 13 Python
keras导入weights方式
Jun 12 Python
python中_del_还原数据的方法
Dec 09 Python
python 实现全球IP归属地查询工具
Dec 18 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
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
学生会副主席竞聘书
2014/03/31 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
市场营销计划书
2015/01/17 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
小学国庆节活动总结
2015/03/23 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
亲情作文之母爱
2019/09/25 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript