首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python从S3读取JSON文件

使用Python从S3读取JSON文件
EN

Stack Overflow用户
提问于 2016-12-06 12:18:19
回答 7查看 166K关注 0票数 91

我一直在S3桶'test‘中跟踪JSON

代码语言:javascript
运行
复制
{
  'Details' : "Something" 
}

我正在使用下面的代码来读取这个JSON并打印键'Details‘

代码语言:javascript
运行
复制
s3 = boto3.resource('s3',
                    aws_access_key_id=<access_key>,
                    aws_secret_access_key=<secret_key>
                    )
content_object = s3.Object('test', 'sample_json.txt')
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(repr(file_content))
print(json_content['Details'])

由于的字符串索引必须是整数的,所以我收到了错误,我不想从S3下载文件,然后读取..。

EN

回答 7

Stack Overflow用户

发布于 2017-11-05 11:56:58

如前所述,必须删除reprjson文件必须对属性使用双引号。在aws/S3上使用此文件:

代码语言:javascript
运行
复制
{
  "Details" : "Something"
}

下面的Python代码可以工作:

代码语言:javascript
运行
复制
import boto3
import json

s3 = boto3.resource('s3')

content_object = s3.Object('test', 'sample_json.txt')
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(file_content)
print(json_content['Details'])
# >> Something
票数 93
EN

Stack Overflow用户

发布于 2018-07-18 01:49:50

下面这句话对我很管用。

代码语言:javascript
运行
复制
# read_s3.py

from boto3 import client

BUCKET = 'MY_S3_BUCKET_NAME'
FILE_TO_READ = 'FOLDER_NAME/my_file.json'
client = client('s3',
                 aws_access_key_id='MY_AWS_KEY_ID',
                 aws_secret_access_key='MY_AWS_SECRET_ACCESS_KEY'
                )
result = client.get_object(Bucket=BUCKET, Key=FILE_TO_READ) 
text = result["Body"].read().decode()
print(text['Details']) # Use your desired JSON Key for your value 

进一步改进

让我们将上面的代码片段称为read_s3.py

直接对AWS Id和密钥进行硬编码并不是个好主意。对于最佳实践,您可以考虑以下两种方法之一:

(1)从存储在本地存储中的json文件(aws_cred.json)读取AWS凭据:

代码语言:javascript
运行
复制
from json import load
from boto3 import client
...
credentials = load(open('local_fold/aws_cred.json'))
client = client('s3',
                 aws_access_key_id=credentials['MY_AWS_KEY_ID'],
                 aws_secret_access_key=credentials['MY_AWS_SECRET_ACCESS_KEY']
                )

(2)从您的环境变量(我首选的部署选项)中读取:

代码语言:javascript
运行
复制
    from os import environ
    client = boto3.client('s3',              
                         aws_access_key_id=environ['MY_AWS_KEY_ID'],
                           aws_secret_access_key=environ['MY_AWS_SECRET_ACCESS_KEY']
                         )

让我们准备一个名为read_s3_using_env.sh的shell脚本,用于设置环境变量,并在其中添加python (read_s3.py),如下所示:

代码语言:javascript
运行
复制
# read_s3_using_env.sh
export MY_AWS_KEY_ID='YOUR_AWS_ACCESS_KEY_ID'
export MY_AWS_SECRET_ACCESS_KEY='YOUR_AWS_SECRET_ACCESS_KEY'
# execute the python file containing your code as stated above that reads from s3
python read_s3.py # will execute the python script to read from s3

现在在终端中执行shell脚本,如下所示:

代码语言:javascript
运行
复制
sh read_s3_using_env.sh
票数 42
EN

Stack Overflow用户

发布于 2019-11-08 18:56:47

想要添加botocore.response.streamingbodyjson.load很好地工作

代码语言:javascript
运行
复制
import json
import boto3

s3 = boto3.resource('s3')

obj = s3.Object(bucket, key)
data = json.load(obj.get()['Body']) 
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40995251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档