从S3 bucket获取文件夹内容

2024-03-28 13:39:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从S3存储桶中的文件夹中获取数据。我有两个文件夹在我的桶,文章和评论。我真的只想获取comments文件夹中的所有数据。数据是多个json文件。当我经过时

这是comments文件夹中众多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变量的类型为bytes


Tags: 文件数据对象keyin文件夹jsonobj
1条回答
网友
1楼 · 发布于 2024-03-28 13:39:55

您可以使用bucket objectsfilter函数过滤查询的bucket对象(我无法直接链接到该函数,请向下滚动一点)

对象的内容确实是一个字节编码的字符串。您可以使用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部分,您必须先下载并读取整个JSON文件

相关问题 更多 >