Зачем использовать загрузку скрипта Python и базовое введение
Часто встречаются люди, которым необходимо загрузить какие-то файловые ресурсы с удаленного сервера.Для загрузки отдельных небольших файлов можно напрямую использовать такие команды, как sz.А как насчет загрузки папки? sz не получится.Конечно, можно сначала сжать папку, а потом скачать.Это тоже возможно.Пока файл не очень большой, есть ли другой способ скачать папку? Конечно, есть способ, то есть написать скрипт Python, а затем использовать модуль paramiko для переноса папки загрузки с удаленного компьютера на локальный, не правда ли, это очень удобно...
Модуль paramiko предоставляет функции ssh и sftp для удаленного входа на сервер для выполнения команд и загрузки и скачивания файлов. Это сторонний программный пакет, его необходимо установить перед использованием. В основном мы используем sftp для скачивания и передачи файлов.
Как и в операции на рисунке ниже, вы можете загружать файлы один за другим в цикле. !
Базовая конфигурация при использовании
Следующая информация должна быть настроена вами самостоятельно, то есть инициализировать некоторые параметры, включая информацию о сервере и конфигурацию пути хранения удаленных файлов и локальных файлов.
# 服务器连接信息
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 sftp от Parmmiko можно хорошо использовать для выполнения операций по передаче файлов. Если у вас есть какие-либо вопросы или идеи, вы можете оставить сообщение или связаться со мной.