python-3.x - 使用 boto3 将字符串写入 S3:“'dict' 对象没有属性 'put'”
问题描述
在 AWS lambda 中,我使用 boto3 将字符串放入 S3 文件中:
import boto3
s3 = boto3.client('s3')
data = s3.get_object(Bucket=XXX, Key=YYY)
data.put('Body', 'hello')
有人告诉我:
[ERROR] AttributeError: 'dict' object has no attribute 'put'
How to write a file or data to an S3 object using boto3 and with的data.put('hello')
热门答案推荐的方法也是如此。data.put_object
'dict' object has no attribute 'put_object'
我究竟做错了什么?
相反,阅读效果很好(使用data.get('Body').read().decode('utf-8')
)。
解决方案
put_object
是s3
对象的方法,而不是数据对象。
这是一个使用 Python 3.7 的完整工作示例:
import json
import boto3
s3 = boto3.client('s3')
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
bucket = 'mybucket'
key = 'id.txt'
id = None
# Write id to S3
s3.put_object(Body='Hello!', Bucket=bucket, Key=key)
# Read id from S3
data = s3.get_object(Bucket=bucket, Key=key)
id = data.get('Body').read().decode('utf-8')
logger.info("Id:" + id)
return {
'statusCode': 200,
'body': json.dumps('Id:' + id)
}
推荐阅读
- html - 当我从 Django 站点上传图像时,为什么图像不会自动调整大小
- postgresql - PostgreSQL:在数据库重新启动时,为什么启动序列号不可预测?
- regex - 正则表达式不适用于可选()?句子
- docker-compose - 在 gitlab-ci.yml 中使用来自 docker-compose 的容器
- c# - 在 BuildServiceProvider 之前访问服务
- java - Jackson - 使用 JsonTypeInfo.DEDUCTION 反序列化时出现 java.lang.EnumConstantNotPresentException
- android - 在库 Kotlin Android 中找不到提供程序的元数据
- php - 我在 woocommerce 高级订单导出 (CSV) 中的每个 woocommerce 订单后添加文本行时遇到问题
- node.js - 当内容类型为“multipart/form-data”时更改 axios 请求标头的默认字符集
- javascript - 对于每个选项不同的选择 [formControl]