我正在尝试从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对象的“ body”部分中检索内容。如果有更好的方法,请告诉我。
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变量的类型为字节。
答案 0 :(得分:1)
您可以使用存储桶对象filter函数过滤查询的存储桶对象(我无法直接链接到该函数,请向下滚动一点)。
确实,对象的内容是字节编码的字符串。您可以使用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'])
没有办法只读取JSON文件的body
部分,您必须先下载并完整阅读。