首页 > 解决方案 > 使用 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'))。

标签: python-3.xdictionaryamazon-s3aws-lambdaboto3

解决方案


put_objects3对象的方法,而不是数据对象。

这是一个使用 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)
    }

推荐阅读