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
相关产品推荐
相关产品推荐

