使用Python脚本从WinSCP服务器多文件夹批量下载文件
用Python脚本从SFTP服务器下载多路径文件至本地
可用的Python模块
- Paramiko:纯Python实现的SFTP协议库,无需依赖WinSCP客户端,轻量且跨平台
- WinSCP Python绑定:基于WinSCP的COM接口开发,适合熟悉WinSCP操作逻辑的用户,需要预先安装WinSCP客户端
方法一:使用Paramiko实现
步骤
- 安装Paramiko:
pip install paramiko
- 编写脚本批量下载文件:
import paramiko import os # 服务器连接参数 host = "你的服务器IP/域名" port = 22 username = "你的登录用户名" password = "你的登录密码" # 密钥认证示例见代码注释 # 定义需要下载的文件映射:(远程文件路径, 本地保存路径) download_tasks = [ ("/remote/folder1/report.csv", "D:/local/downloads/report.csv"), ("/remote/folder2/image.png", "D:/local/downloads/images/image.png"), ("/remote/folder3/document.pdf", "D:/local/downloads/docs/document.pdf"), ] # 建立SFTP连接 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 密码认证连接 ssh_client.connect(host, port, username, password) # 密钥认证方式(替换上面的connect) # private_key = paramiko.RSAKey.from_private_key_file("C:/path/to/your/key.ppk") # ssh_client.connect(host, port, username, pkey=private_key) sftp = ssh_client.open_sftp() for remote_path, local_path in download_tasks: # 确保本地目标文件夹存在 local_dir = os.path.dirname(local_path) if not os.path.exists(local_dir): os.makedirs(local_dir) # 执行下载 sftp.get(remote_path, local_path) print(f"下载完成:{remote_path} -> {local_path}") finally: # 关闭资源 if 'sftp' in locals(): sftp.close() ssh_client.close()
方法二:使用WinSCP Python绑定实现
步骤
- 下载并安装WinSCP客户端,确保将WinSCP添加到系统环境变量
PATH中 - 安装WinSCP Python绑定:
pip install winscp
- 编写下载脚本:
import winscp # 会话配置 session_opts = winscp.SessionOptions( protocol=winscp.Protocol.Sftp, host_name="你的服务器IP/域名", user_name="你的登录用户名", password="你的登录密码", # 密钥认证配置(替换密码) # private_key_path="C:/path/to/your/key.ppk" ) # 下载任务列表 download_tasks = [ ("/remote/folder1/file1.txt", "D:/local/files/file1.txt"), ("/remote/folder2/file2.zip", "D:/local/files/archives/file2.zip"), ] with winscp.Session() as session: # 连接服务器 session.open(session_opts) for remote_path, local_path in download_tasks: # WinSCP会自动创建不存在的本地文件夹 session.get_file(remote_path, local_path) print(f"下载完成:{remote_path} -> {local_path}")
注意事项
- 路径格式:远程路径使用Unix风格的
/分隔,本地Windows路径可用/或\\(转义后) - 权限:确保本地目标文件夹有写入权限,远程文件有读取权限
- 密钥认证:如果使用PuTTY生成的
.ppk密钥,两种方法都支持,代码中已给出示例
内容的提问来源于stack exchange,提问作者Pooja Bharti
相关产品推荐
相关产品推荐

