【问题标题】:Python Boto3 error - "expected string or bytes-like object" when deleting an Amazon S3 objectPython Boto3 错误 - 删除 Amazon S3 对象时出现“预期的字符串或类似字节的对象”
【发布时间】:2019-12-31 20:41:25
【问题描述】:

当我尝试测试用 Python 3.7 boto3 AWS SDK 编写的以下 lambda 函数时,我遇到了以下代码行(lambda 代码块中的最后一行)的问题。 lambda 函数删除 S3 存储桶中的对象,迭代存储桶中的每个对象。

client.Object(bucket, key).delete()

当我保存并运行代码时,我在上述行中遇到的错误,也是下面 lambda 函数代码块中的最后一行,如下所示。请求帮助。

“errorMessage”:“预期的字符串或字节类对象”,“errorType”:“TypeError”

【Lambda函数代码块】

import boto3
import json
import uuid
import csv

def lambda_handler(event, context):

   recordId = str(uuid.uuid4())
   print (recordId)
   client = boto3.resource(
       's3',
   region_name='us-east-1',
       aws_access_key_id='XXXXXXXXXXXXXXX' ,
       aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
   )    

   bucket = client.Bucket('my_bucket')

   dynamodb = boto3.resource('dynamodb')

   table = dynamodb.Table('my_dynamo')

   for obj in bucket.objects.all():
        key = obj.key
        body = obj.get()['Body'].read()
        data = body.decode("utf-8") 
        data1 = data.split('\n')

        client.Object(bucket, key).delete()

【问题讨论】:

  • 能否请您添加代码sn -p 会更好理解。除此之外,尝试将参数显式类型转换为抛出错误的字符串。
  • 我加了sn-p的代码,请指教!非常感谢。
  • 你必须使用client.Object(bucket.name, key).delete(),bucket.name是标识符

标签: python amazon-web-services amazon-s3 aws-lambda boto3


【解决方案1】:

在上面的代码中,您使用存储桶对象进行删除。 你需要更换

 client.Object(bucket, key).delete()

与

 client.Object(bucket.name, key).delete()

因为bucket的名字和key应该是字符串

【讨论】:

    【解决方案2】:
    import boto3
    
    bucketName = "your bucketname"
    s3 = boto3.resource('s3')
    s3.Object(bucketName, key).delete()
    

    【讨论】:

      【解决方案3】:

      我已使用客户端进行删除。不是资源。 这工作正常。你可以试试这个。

      client_s3 = boto3.client('s3')
      res = client_s3.list_objects(Bucket=bucket_name)
      for list_key in res['Contents']:
          client_s3.delete_object(Bucket=bucket_name, Key=list_key['Key'])
      

      如果您需要获取任何其他详细信息,这是 res['Contents'] 的结构:

      'Key': 'string',
      'LastModified': datetime(2015, 1, 1),
      'ETag': 'string',
      'Size': 123,
      'StorageClass':'STANDARD'|'REDUCED_REDUNDANCY'|'GLACIER'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'DEEP_ARCHIVE',
      'Owner': {
                'DisplayName': 'string',
                'ID': 'string'
      }
      

      【讨论】:

        猜你喜欢
        • 2017-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 2020-11-09
        相关资源
        最近更新 更多