以下是使用python paramiko模块实现sftp上传下载功能的示例代码,支持目录递归:

import os
import paramiko

class SFTPClient:
    def __init__(self, host, port, username, password):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.transport = None
        self.sftp = None

    def connect(self):
        self.transport = paramiko.Transport((self.host, self.port))
        self.transport.connect(username=self.username, password=self.password)
        self.sftp = paramiko.SFTPClient.from_transport(self.transport)

    def disconnect(self):
        if self.sftp:
            self.sftp.close()
            self.sftp = None
        if self.transport:
            self.transport.close()
            self.transport = None

    def upload(self, local_path, remote_path):
        if os.path.isfile(local_path):
            self.sftp.put(local_path, remote_path)
        else:
            self.sftp.mkdir(remote_path)
            for file_name in os.listdir(local_path):
                self.upload(os.path.join(local_path, file_name), os.path.join(remote_path, file_name))

    def download(self, remote_path, local_path):
        if self.sftp.isfile(remote_path):
            self.sftp.get(remote_path, local_path)
        else:
            os.makedirs(local_path, exist_ok=True)
            for file_name in self.sftp.listdir(remote_path):
                self.download(os.path.join(remote_path, file_name), os.path.join(local_path, file_name))

if __name__ == '__main__':
    sftp = SFTPClient('host', 22, 'username', 'password')
    sftp.connect()
    sftp.upload('/local/path', '/remote/path')
    sftp.download('/remote/path', '/local/path')
    sftp.disconnect()

在上面的示例代码中,我们定义了一个SFTPClient类,它包含了连接、断开连接、上传、下载等操作。在上传和下载时,我们使用了递归的方式来处理目录。同时,我们也使用了paramiko模块提供的SFTPClient类来进行文件传输操作。


原文地址: https://www.cveoy.top/t/topic/bI3c 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录