Загрузка файлов с SFTP-сервера в локальный каталог

У меня есть код для загрузки файлов из удаленного каталога в локальный каталог с помощью python. Мне нужен код, который может загружать один файл из удаленного каталога в локальную папку. Пожалуйста, помогите мне изменить этот код. Все предложения приветствуются. Я протестировал этот код, но он загружает все содержимое удаленного каталога в локальный каталог, но мне нужен код, который может загружать один файл из удаленного каталога в локальный. Я использую SFTP-сервер

код, который я получил: (на основе Python pysftp get_r из Linux отлично работает в Linux, но не в Windows)

import os
import pysftp
from stat import S_IMODE, S_ISDIR, S_ISREG

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    
sftp=pysftp.Connection('192.168.X.X', username='username',password='password',cnopts=cnopts)

def get_r_portable(sftp, remotedir, localdir, preserve_mtime=False):
    for entry in sftp.listdir(remotedir):
        remotepath = remotedir + "/" + entry
        localpath = os.path.join(localdir, entry)
        mode = sftp.stat(remotepath).st_mode
        if S_ISDIR(mode):
            try:
                os.mkdir(localpath,mode=777)
            except OSError:     
                pass
            get_r_portable(sftp, remotepath, localpath, preserve_mtime)
        elif S_ISREG(mode):
            sftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)

remote_path=input("enter the remote_path: ")
local_path=input("enter the local_path: ")

get_r_portable(sftp, remote_path, local_path, preserve_mtime=False)

вам нужно удалить for entry in sftp.listdir(remotedir) и просто использовать sftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)

LinPy 29.05.2019 08:11

если вам удобно, можете ли вы изменить код @TonyJafar. я новичок в питоне

simon cowell 29.05.2019 08:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
1 213
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
import os
import pysftp
from stat import S_IMODE, S_ISDIR, S_ISREG

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    
sftp=pysftp.Connection('192.168.X.X', username='username',password='password',cnopts=cnopts)

def get_r_portable(sftp, remotedir, remotefile, localdir, preserve_mtime=False):
    remotepath = remotedir + "/" + remotefile
    localpath = os.path.join(localdir, remotefile)
     mode = sftp.stat(remotepath).st_mode
     if S_ISDIR(mode):
          try:
              os.mkdir(localpath,mode=777)
          except OSError:     
              pass
          get_r_portable(sftp, remotepath, localpath, preserve_mtime)
     elif S_ISREG(mode):
          sftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)

remote_path=input("enter the remote_path: ")
remote_file=input("enter the remote file: ")

local_path=input("enter the local_path: ")

get_r_portable(sftp, remote_path, remote_file, local_path, preserve_mtime=False)

Я пытался использовать это решение для своих нужд, и я продолжаю получать «SSHException: соединение с сервером разорвано:» Пробовал канал = sftp.sftp_client.get_channel() channel.lock.acquire() channel.default_max_packet_size=paramiko.common.DEFAULT_MAX_‌ PACKET_SIZE, channel.out_window_size=paramiko.common.MAX_WINDOW_SIZE channel.transport.packetizer.REKEY_BYTES = pow(2, 40) # Максимум 1 ТБ, это снижение безопасности! channel.transport.packetizer.REKEY_PACKETS = pow(2, 40) channel.lock.release()" но ничего не работает - помогите пожалуйста?

Stumbling Through Data Science 25.06.2019 16:38

Другие вопросы по теме