s3fs:用操作本地文件的方式读写 S3

s3fs:用操作本地文件的方式读写 S3

s3fs 在 GitHub 上已经拿到 1,033 Star 了。

这个项目属于 fsspec 生态,专门做一件事:给 Amazon S3 提供一个 Python 文件系统接口。基于 aiobotocore 实现,让你用 open、read、write 这些熟悉的方法直接操作 S3 上的对象,不需要关心底层的 HTTP 请求和分页逻辑。

1、这玩意儿是干嘛的

一句话:把 S3 对象存储包装成你熟悉的文件系统。

在 Python 里读写 S3 文件,通常要走 boto3 或 aiobotocore。这意味着你要先创建客户端、配置 region、处理各种异常、手动管理流。代码写出来差不多是这样:

python 复制代码
import boto3

s3 = boto3.client('s3')
response = s3.get_object(Bucket='my-bucket', Key='my-file.txt')
content = response['Body'].read()

s3fs 把这些都包了一层。上面的代码变成:

python 复制代码
import s3fs

fs = s3fs.S3FileSystem()
with fs.open('my-bucket/my-file.txt', 'r') as f:
    content = f.read()

目录操作也一样:

python 复制代码
fs.ls('my-bucket')
fs.mkdir('my-bucket/new-folder')
fs.rm('my-bucket/old-file.txt')

2、为什么要用它

做过数据管线的人都清楚,S3 交互代码很容易变成一坨模板代码。配置客户端、处理分页、管理流式读写、重试逻辑......每次新项目都要复制粘贴一遍,测试还要 mock S3 服务。

s3fs 把这些重复工作都收进去了。更重要的是,它是 fsspec 的标准实现之一。fsspec 是 Python 里文件系统规范的统一抽象,pandas、xarray、dask 这些主流工具都认它。你的代码里写 s3://my-bucket/data.csv,pandas 底层自动调度 s3fs 来读。

异步场景它也能覆盖。基于 aiobotocore,所有操作都支持异步接口。并发读写大量小文件时,不会因为同步等待而卡死。

3、核心能力

  • 完整的文件系统操作:open、read、write、append、copy、move、rm、mkdir、ls、info
  • 流式读写:大文件不需要全部加载到内存,边读边处理
  • 目录缓存:重复列目录时减少 API 调用,降低成本
  • 异步支持:基于 aiobotocore 的 async 接口,适合高并发场景
  • 与 fsspec 生态集成:pandas、dask、xarray 开箱即用
  • 兼容多种 S3 端点:AWS、MinIO、Ceph、阿里云 OSS 等

4、安装和配置

安装很简单:

bash 复制代码
pip install s3fs

基本用法:

python 复制代码
import s3fs

fs = s3fs.S3FileSystem()

with fs.open('my-bucket/data.txt', 'w') as f:
    f.write('Hello, S3!')

with fs.open('my-bucket/data.txt', 'r') as f:
    print(f.read())

指定自定义端点:

python 复制代码
fs = s3fs.S3FileSystem(
    endpoint_url='https://play.minio.io:9000',
    key='minio',
    secret='minio123'
)

5、适合哪些人用

  • 需要在 Python 里频繁读写 S3 的数据工程师
  • 用 pandas、dask 处理云端数据的分析师
  • 搭数据管线、不想重复写 S3 模板代码的开发者
  • 用 MinIO 或兼容 S3 的私有存储的团队

6、写在最后

s3fs 的思路很直接:用统一的文件系统抽象覆盖各种存储后端。S3 是对象存储,但很多时候你只想把它当文件系统来用。这个项目就是干这个的,没有多余的东西,代码量也不大,但正好填平了那层 gap。一千多 Star 不算多,但在 fsspec 生态里它是一个基础组件,很多你日常在用的工具底层都依赖它。

相关推荐
瑞克-桑切斯6 小时前
真实企业场景 运维安全与管理
java·网络·github
高频因子挖掘机8 小时前
500只股票 × 多年日线:数据获取与本地存储如何分工?
后端·github·api
wflynn8 小时前
GitHub 日榜趋势速报 | 2026-10-16
开源·github
高频因子挖掘机9 小时前
别急着搭数据平台:量化策略开发如何用最小闭环验证想法
后端·github·api
miofly9 小时前
GitHub 今日推荐|sweety-handdraw-video:文章转手绘口播视频
javascript·开源·github
m4Rk_10 小时前
【论文阅读】Agent 记忆机制(102):UMA——用多个未来问题端到端训练一份共享记忆
论文阅读·人工智能·学习·开源·github
adinnet202611 小时前
条件路由与状态传递:自动化员工怎么“分情况办事“和“记上下文“
运维·自动化·github
暗夜铭少13 小时前
用 Go 写了一个单二进制 WAF,聊聊架构取舍和 5 个踩坑点
github
用户29914221968013 小时前
GitHub 热榜项目:日榜(2026-10-17)
人工智能·开源·github
wflynn13 小时前
GitHub 今日推荐|open_scion:为AI代理设计的并发版本控制
git·开源·go·github·agent·coding-agents