使用python paramiko 模块 实现一套完整的sftp上传下载功能 支持目录递归
以下是使用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 著作权归作者所有。请勿转载和采集!