如何在Python中直接读取AWS S3存储桶中的JSON文件?
Python 原生的 open() 函数仅支持访问本地文件系统,无法解析 s3:// 协议的对象存储路径,因此会抛出 FileNotFoundError 报错。如果想要使用类似原生 open 的写法直接读取 S3 上的 JSON 文件,可以使用以下两种成熟的第三方库实现:
方案1:使用 s3fs 库
s3fs 基于 boto3 开发,实现了类 POSIX 的文件系统接口,会自动读取环境变量中配置的 AWS 凭证,无需额外传参。
- 安装命令:
pip install s3fs
- 读取代码示例:
import s3fs import json import os # 你已经配置好的环境变量 os.environ['AWS_ACCESS_KEY_ID'] = "my_access_key" os.environ['AWS_SECRET_ACCESS_KEY'] = "my_secret_access_key" os.environ['AWS_DEFAULT_REGION'] = 'eu-central-1' fs = s3fs.S3FileSystem() # 类open写法读取S3文件 with fs.open("s3://bucketname/folder/file.json", "r", encoding="utf-8") as f: dict_list = json.load(f) # 直接转换为Python字典列表
方案2:使用 smart_open 库
smart_open 对各类非本地存储协议做了适配,调用方式和原生 open 完全一致,代码侵入性更低。
- 安装命令:
pip install smart_open
- 读取代码示例:
from smart_open import open import json import os # 你已经配置好的环境变量 os.environ['AWS_ACCESS_KEY_ID'] = "my_access_key" os.environ['AWS_SECRET_ACCESS_KEY'] = "my_secret_access_key" os.environ['AWS_DEFAULT_REGION'] = 'eu-central-1' # 写法和原生open完全一致,直接支持s3://路径 with open("s3://bucketname/folder/file.json", "r", encoding="utf-8") as f: dict_list = json.load(f)
注:以上两个库底层均基于 boto3 实现,和直接使用 boto3 读取的性能没有明显差异,仅做了语法糖封装适配原生
open的调用习惯。
内容的提问来源于stack exchange,提问作者Fredrik
相关产品推荐
相关产品推荐

