python sftp 速度_python 从SFTP下载文件

最近在做一个自动化测试工具,需要从SFTP拉下文件,用到python中paramiko模块,进行远程服务器的连接(至于paramiko、吧啦吧啦,网上一大堆,不懂去找度娘啦)

(1) 安装paramiko

本宝宝本地安装的是python3.6,打开cmd

将当前工作路径切换到:C:\Local\Programs\Python\Python36-32\Lib\site-packages(就是python安装路径-->Lib目录-->site-packages目录)

执行命令:pip install paramiko

刚开始如下错误:

错误提示:ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org',port=443):Read timed out

解决方法:在命令中添加 --default-timeout=100 延长超时时间即可。如,pip --default-timeout=100 install paramiko

安装完成之后,在dos中输入python之后,import paramiko不报错就说明安装成功

(2)使用paramiko

sf = paramiko.Transport(host, port)              || host是sftp服务器主机名,port是端口号

sf.connect(username=username, password=password) || username是用户名,password是密码

sftp = paramiko.SFTPClient.from_transport(sf)    || 建立连接

(3)实现下载功能

从sftp拉文件时,遇到的情况如下

#1.远程文件路径就是某一文件的全路径,例如:/datafile/text.txt

sftp.get(file, local_filename)

file是要下载的文件路径,而 local_filename是要下载到哪个路径下

#2.远程文件路径是一个文件夹,例如:/datafile/

针对于这一种情况,首先要遍历得到所有的文件,这里其实刚开始我也是整晕了,不能下载文件夹,只能下载对应的文件

这里用了递归的方法遍历得到所有的文件

def sftp_download(app, sftp, remote_dir):

all_files = list()

if remote_dir[-1] == '/':

remote_dir = remote_dir[0:-1]

files = sftp.listdir_attr(remote_dir)

for file in files:

filename = remote_dir + '/' + file.filename

if stat.S_ISDIR(file.st_mode):

all_files.extend(sftp_download(app, sftp, filename))

else:

all_files.append(filename)

return all_files

stat.S_ISDIR(file.st_mode)这个函数是用来判断远程服务器上是否是文件夹(和windows还是有区别滴)

下载到本地的时候也要创建对应的文件名字呦,就是上边提到的sftp.get()这个方法传递的是两个参数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值