python实现下载整个ftp目录的方法
作者:mindg.cn 发布时间:2023-01-31 01:45:17
标签:python,ftp,下载
前言
最近因为业务需求,就写了这个脚本,脚本完成的任务是从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
后面跟的参数基本就是研发提供给你要更新的文件名称,然后运行就可以下载整个目录中的文件,脚本其它内容大家看注释就会明白。
来源:https://www.mindg.cn/?p=1627


猜你喜欢
- 本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行echo database用来测试协议层的代码http
- 1.什么是临时表内部临时表是sql语句执行过程中,用来存储中间结果的的数据表,其作用类似于:join语句执行过程中的joinbuffer,o
- 目录1、read_sql_query 读取 mysql2、to_sql 写入数据库 要实现 pandas 对 mysql 的读写需
- 目前可实现:MD5算法、SHA256算法、先MD5后SHA256、先SHA256后MD5、两次MD5、两次SHA256、前8位MD5算法后8
- 一篇关于STR和UNICODE的好文章整理下python编码相关的内容注意: 以下讨论为Python2.x版本, Py3k的待尝试开始用py
- 本文实例讲述了python自动化测试之setUp与tearDown的用法,分享给大家供大家参考。具体如下:实例代码如下:class Roma
- 1.获取页面titletitle:获取当前页面的标题显示的字段from selenium import webdriverimport ti
- settings文件如下:DATABASES = { 'default': {
- 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一
- 问题:我在 Vue 中有一个 form 表单,用于上传博客帖子,它有标题、正文、描述、片段和图片等范围。所有的一切都是必需的。我在 Expr
- <?php/** * 网站地图更新控制器 * * &nbs
- 1、安装virtulenv、virtulenvwrapper包pip install virtualenv virtualenvwrappe
- 局部名字静态检测 Python探测局部作用域的时候:是在python编译代码时检测,而不是通过他们在运行时的赋值。 正常的情况下,没在函数中
- 1.1.1 摘要 Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接、外联接和交叉联接等。如果我们想
- 在python中启动和关闭线程:首先导入threadingimport threading然后定义一个方法def serial_read()
- 我就废话不多说了,直接上代码吧!集成环境:win10 pycharm #!/usr/bin/env python3.5.2# -*- cod
- 1.背景最近使用Pytest中的fixture和conftest时,遇到需要在conftest中的setup和teardown方法里传递参数
- mac下安装mysql8.0.11时 要求输入密码 之后想修改密码注意 此方法适用于mac下的mysql8.0.11 其他版本不一定相同1.
- 本文实例讲述了Python实现的求解最大公约数算法。分享给大家供大家参考,具体如下:使用Python求解两个数的最大公约数的时候用到了前面介
- 析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。GC(Garbage Collector) 在PHP中,没有任何变量指向这个对象时,