You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python脚本从WinSCP服务器多文件夹批量下载文件

用Python脚本从SFTP服务器下载多路径文件至本地

可用的Python模块

  • Paramiko:纯Python实现的SFTP协议库,无需依赖WinSCP客户端,轻量且跨平台
  • WinSCP Python绑定:基于WinSCP的COM接口开发,适合熟悉WinSCP操作逻辑的用户,需要预先安装WinSCP客户端

方法一:使用Paramiko实现

步骤

  1. 安装Paramiko:
pip install paramiko
  1. 编写脚本批量下载文件:
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绑定实现

步骤

  1. 下载并安装WinSCP客户端,确保将WinSCP添加到系统环境变量PATH中
  2. 安装WinSCP Python绑定:
pip install winscp
  1. 编写下载脚本:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:45:38