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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
python传递参数方式小结
Apr 17 Python
Python的Tornado框架异步编程入门实例
Apr 24 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
keras多显卡训练方式
Jun 10 Python
为什么说python适合写爬虫
Jun 11 Python
Python合并多张图片成PDF
Jun 09 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 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基于session实现数据库交互的类实例
2015/08/03 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python创建数字列表的示例
2019/11/28 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
通用求职信范文模板分享
2013/12/27 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
四年级科学教学反思
2014/02/10 职场文书
家长会感言
2015/08/01 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis