我一直在S3桶'test‘中跟踪JSON
{
'Details' : "Something"
}
我正在使用下面的代码来读取这个JSON并打印键'Details‘
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下载文件,然后读取..。
发布于 2017-11-05 11:56:58
如前所述,必须删除repr
,json
文件必须对属性使用双引号。在aws/S3上使用此文件:
{
"Details" : "Something"
}
下面的Python代码可以工作:
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
发布于 2018-07-18 01:49:50
下面这句话对我很管用。
# 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凭据:
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)从您的环境变量(我首选的部署选项)中读取:
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
),如下所示:
# 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脚本,如下所示:
sh read_s3_using_env.sh
发布于 2019-11-08 18:56:47
想要添加botocore.response.streamingbody
与json.load
很好地工作
import json
import boto3
s3 = boto3.resource('s3')
obj = s3.Object(bucket, key)
data = json.load(obj.get()['Body'])
https://stackoverflow.com/questions/40995251
复制相似问题