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

Python/SFTP:使用get()方法覆盖已存在的文件

使用pysftp的get()方法实现本地文件覆盖

pysftp的get()方法默认行为就是覆盖本地已存在的同名文件,你不需要额外配置参数就能实现需求。

你的现有代码其实已经满足“本地文件存在时直接替换”的要求——当你调用get()时,如果localpath指定的文件已经存在,pysftp会直接用远程文件覆盖它,不会跳过或提示。

不过如果你是想避免无意义的重复下载(比如远程文件和本地文件内容/修改时间完全一致时不下载),可以先对比远程和本地文件的修改时间,再决定是否调用get():

import os
from stat import S_ISREG

with pysftp.Connection(
        host='hostname',
        username='user',
        private_key=key,
        cnopts=cnopts) as sftp:
    
    remote_path = "file_path"
    local_path = "local_path"
    
    # 获取远程文件的状态
    remote_stat = sftp.stat(remote_path)
    # 确认是普通文件
    if S_ISREG(remote_stat.st_mode):
        # 检查本地文件是否存在
        if os.path.exists(local_path):
            # 获取本地文件修改时间(转为UTC时间戳,和远程保持一致)
            local_mtime = os.path.getmtime(local_path)
            # 对比远程和本地的修改时间
            if remote_stat.st_mtime > local_mtime:
                # 远程文件更新,下载覆盖
                sftp.get(remotepath=remote_path, localpath=local_path, preserve_mtime=True)
        else:
            # 本地文件不存在,直接下载
            sftp.get(remotepath=remote_path, localpath=local_path, preserve_mtime=True)

总结:

  • 单纯需要“本地存在就覆盖”:直接用你原有的代码即可,get()默认支持。
  • 想要避免重复下载未更新的文件:可以通过对比文件修改时间来优化。

内容的提问来源于stack exchange,提问作者pillow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:26:59