You need to enable JavaScript to run this app. SFTP服务器文件移动问题:能否使用Paramiko替代shutil实现相关操作?
优惠活动
大模型
产品
解决方案
定价
更多

SFTP服务器文件移动问题:能否使用Paramiko替代shutil实现相关操作?

SFTP文件移动需求的Paramiko实现说明

完全可以通过Paramiko实现你的需求。
shutil、os模块仅支持操作本地挂载的文件系统,SFTP属于远程网络文件协议,没有本地映射挂载的情况下本地IO类库无法直接识别路径,而Paramiko作为Python实现的SSH协议工具库,原生内置了SFTP客户端组件,完全支持SFTP服务器上的文件查询、重命名、传输、删除等操作。

常规实现逻辑

  • 同SFTP服务器内部移动文件:不需要跨网络传输数据,直接调用SFTP客户端的重命名方法即可完成移动+加时间戳的操作,执行效率很高。
  • 跨SFTP服务器/脚本运行服务器与SFTP服务器之间移动:需要先将源文件下载到脚本运行的服务器临时目录,拼接好带时间戳的新文件名后再上传到目标路径,最后删除两端的源文件即可。

参考代码示例

import paramiko
from datetime import datetime

# 初始化SSH客户端并配置自动接受未知主机密钥
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接SFTP服务器,密钥认证可替换password参数为key_filename='私钥文件路径'
ssh_client.connect(
    hostname="SFTP服务器地址",
    port=22,
    username="登录账号",
    password="登录密码"
)
sftp_client = ssh_client.open_sftp()

# 配置源路径和目标目录
source_file_path = "/源目录/待移动文件.csv"
target_directory = "/目标目录/"

# 生成带时间戳的新文件名
raw_filename = source_file_path.split("/")[-1]
if "." in raw_filename:
    name_suffix, name_prefix = raw_filename.rsplit(".", 1)
    new_filename = f"{name_suffix}_{datetime.now().strftime('%Y%m%d%H%M%S')}.{name_prefix}"
else:
    new_filename = f"{raw_filename}_{datetime.now().strftime('%Y%m%d%H%M%S')}"
target_file_path = f"{target_directory}{new_filename}"

# 同SFTP服务器内部直接移动文件
sftp_client.rename(source_file_path, target_file_path)

# 关闭连接
sftp_client.close()
ssh_client.close()

注意事项

  • 执行移动操作前可以先调用sftp_client.stat(target_file_path)捕获异常判断目标路径是否存在,避免意外覆盖已有文件。
  • 大文件跨服务器传输的场景建议添加断点续传逻辑,避免网络波动导致操作失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:09:02