【问题标题】:Writing string to S3 with boto3: "'dict' object has no attribute 'put'"使用 boto3 将字符串写入 S3:“'dict' 对象没有属性 'put'”
【发布时间】:2019-06-26 14:00:24
【问题描述】:

在 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'

data.put('hello') 也是如此,这是How to write a file or data to an S3 object using boto3 的热门答案推荐的方法,data.put_object'dict' object has no attribute 'put_object'

我做错了什么?

相反,阅读效果很好(data.get('Body').read().decode('utf-8'))。

【问题讨论】:

  • 我发现使用S3最简单的方法是在本地创建一个文件,然后通过put_object()上传。这样,您就可以将“文件创建”与“文件上传”分开,从而使调试变得更容易。

标签: python-3.x dictionary amazon-s3 aws-lambda boto3


【解决方案1】:

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)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2017-03-30
    • 2012-01-12
    • 2021-03-08
    • 2017-05-12
    • 2019-03-11
    相关资源
    最近更新 更多