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

如何使用Python s3fs将S3对象从一个存储桶复制到另一个

使用s3fs复制S3对象到另一个存储桶

s3fs并没有把复制操作放在最显眼的文档位置,但它确实支持直接调用S3原生复制API,也可以用类似本地文件的读写方式完成复制。下面是两种实用方案:

方法一:直接调用copy方法(高效,推荐用于大文件/批量操作)

这个方法基于S3的CopyObject API实现,不需要把文件下载到本地,全程在S3服务端完成复制,效率很高。

单文件复制示例

import s3fs

# 初始化s3fs客户端(自动读取AWS凭证:环境变量、~/.aws/credentials 等)
fs = s3fs.S3FileSystem()

# 定义源对象和目标对象的完整路径
source_obj = "s3://your-source-bucket/folder/source-file.jpg"
target_obj = "s3://your-target-bucket/new-folder/target-file.jpg"

# 执行复制
fs.copy(source_obj, target_obj)

批量复制前缀下的所有对象

如果需要复制某个目录(前缀)下的所有文件,可以结合glob方法批量处理:

import s3fs

fs = s3fs.S3FileSystem()

source_prefix = "s3://source-bucket/docs/"
target_prefix = "s3://target-bucket/backup/docs/"

# 遍历源前缀下的所有对象
for src_path in fs.glob(f"{source_prefix}*"):
    # 替换源桶名称,构造目标路径
    target_path = src_path.replace(source_prefix.split("//")[1].split("/")[0], target_prefix.split("//")[1].split("/")[0])
    fs.copy(src_path, target_path)

方法二:模拟本地文件读写(适合小文件)

对于小文件,可以像操作本地文件一样,打开源文件读取内容后写入目标文件,逻辑简单直观:

import s3fs

fs = s3fs.S3FileSystem()

source_obj = "s3://source-bucket/small-file.txt"
target_obj = "s3://target-bucket/small-file-copy.txt"

# 读取源文件并写入目标文件
with fs.open(source_obj, "rb") as src_f, fs.open(target_obj, "wb") as dst_f:
    dst_f.write(src_f.read())

注意事项

  • 权限要求:确保你的AWS凭证拥有源桶的s3:GetObject权限和目标桶的s3:PutObject权限。
  • 跨区域复制:S3支持跨区域复制,s3fs的copy方法会自动处理,无需额外配置。
  • 大文件优化:优先用方法一,避免方法二的内存占用问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:55:07