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

相關文章
相關標籤/搜索