Python经过paramiko从远处服务器下载文件资源到本地

为何要用Python脚本下载以及基本介绍

常常会有人须要从远程服务器下载一些文件资源,下载个别小文件能够直接用sz等命令,可是,须要下载一个文件夹呢?sz就不行了,这时候固然能够先压缩文件夹,而后下载,这样也是能够的,只要文件不是很大,那么,有没有其余办法下载文件夹呢?办法固然是有的,就是写Python脚本,而后经过paramiko模块就能够从远程传输下载文件夹到本地了,是否是很方便呢……  python

paramiko模块提供了ssh及sftp进行远程登陆服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用以前须要先进行安装,咱们这里主要利用sftp进行下载传输文件 bash

就像下图中的运行,能够一个一个的循环下载文件 !服务器


 使用时候的基本配置

下面的这些信息须要本身配置一下,即初始化一些参数,包括服务器信息以及远程文件和本地文件的存放路径配置ssh

# 服务器链接信息
host_name = '127.0.0.1'
user_name = 'root'
password = 'root'
port = 22
# 远程文件路径(须要绝对路径)
remote_dir = '/data/nfs/zdlh/pdf/2018/07/31'
# 本地文件存放路径(绝对路径或者相对路径均可以)
local_dir = 'file_download/'复制代码

实现源码 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" 经过paramiko从远处服务器下载文件资源到本地 author: gxcuizy time: 2018-08-01 """

import paramiko
import os
from stat import S_ISDIR as isdir


def down_from_remote(sftp_obj, remote_dir_name, local_dir_name):
    """远程下载文件"""
    remote_file = sftp_obj.stat(remote_dir_name)
    if isdir(remote_file.st_mode):
        # 文件夹,不能直接下载,须要继续循环
        check_local_dir(local_dir_name)
        print('开始下载文件夹:' + remote_dir_name)
        for remote_file_name in sftp.listdir(remote_dir_name):
            sub_remote = os.path.join(remote_dir_name, remote_file_name)
            sub_remote = sub_remote.replace('\\', '/')
            sub_local = os.path.join(local_dir_name, remote_file_name)
            sub_local = sub_local.replace('\\', '/')
            down_from_remote(sftp_obj, sub_remote, sub_local)
    else:
        # 文件,直接下载
        print('开始下载文件:' + remote_dir_name)
        sftp.get(remote_dir_name, local_dir_name)


def check_local_dir(local_dir_name):
    """本地文件夹是否存在,不存在则建立"""
    if not os.path.exists(local_dir_name):
        os.makedirs(local_dir_name)


if __name__ == "__main__":
    """程序主入口"""
    # 服务器链接信息
    host_name = '127.0.0.1'
    user_name = 'root'
    password = 'root'
    port = 22
    # 远程文件路径(须要绝对路径)
    remote_dir = '/data/nfs/zdlh/pdf/2018/07/31'
    # 本地文件存放路径(绝对路径或者相对路径均可以)
    local_dir = 'file_download/'

    # 链接远程服务器
    t = paramiko.Transport((host_name, port))
    t.connect(username=user_name, password=password)
    sftp = paramiko.SFTPClient.from_transport(t)

    # 远程文件开始下载
    down_from_remote(sftp, remote_dir, local_dir)

    # 关闭链接
    t.close()
复制代码

 结束语

在Python中,能够很好地利用Parmmiko的sftp完成文件传输操做。你们有什么疑问或者想法,能够留言或者联系我。
ui

相关文章
相关标签/搜索