python - 从 S3 存储桶获取文件夹内容
问题描述
我正在尝试从 S3 存储桶中的文件夹中获取数据。我的存储桶中有两个文件夹,文章和评论。我真的只想获取评论文件夹中的所有数据。数据是多个json文件。当我经过
这是注释文件夹中众多 json 文件之一中的 json 对象的示例
{"7475199770543690800": {"author": "BKD2674", "body": "Saying its Meme, then saying you're buying in lol", "ups": 10, "fullname": "t1_fsqwfto", "created_utc": "2020-06-03T13:54:45", "subreddit": "stocks", "article_id": "gvuau0"}
我真的只想要 json 对象的“body”部分,因为它包含注释。我想将 json 文件中的所有内容存储在一个大字典中,遍历字典并检索 json 对象的“正文”部分中的内容。如果有更好的方法来做到这一点,请告诉我。
s3 = boto3.resource('s3')
bucket = s3.Bucket('diegos-reddit-bucket')
for obj in bucket.objects.all():
key = obj.key
body = obj.get()['Body'].read()
这只是我输入的一个样本来测试它。我得到了我的存储桶,但 S3 正在阅读文章,而不仅仅是评论文件夹。body 变量也是字节类型。
解决方案
您可以使用存储桶对象过滤功能过滤您查询的存储桶对象(我无法直接链接到该功能,向下滚动一点)。
确实,对象的内容是字节编码的字符串。您可以使用body.decode('utf-8')
来获取文本表示,但json.load
应该能够为您处理。因此,这应该有效
import json, boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('diegos-reddit-bucket')
for obj in bucket.objects.filter(Prefix='comments'):
body = json.load(obj.get()['Body'])
没有办法只读取body
JSON 文件的部分,您必须先下载并完整阅读。
推荐阅读
- google-sheets - 删除Google表格单元格中重复单词的公式
- powershell - powershell中的7zip错误的临时文件
- javascript - JavaScript CryptoJS.enc.Base64 等效 C#
- php - 无法访问通过 jquery ajax 发送的 php 文件中的数据
- javascript - 无法在 useEffect 中模拟函数
- php - withCount 与其他属性
- reactjs - Antd Table:如何以编程方式确保行可见?
- git - git clone 后显示为已删除的文件
- sql - 在增量模型上运行时对(无)进行 DBT 过滤
- jmeter - 是否可以在 jmeter 的线程下编写线程?如果是,那么如何?