Python Boto3 错误 - 删除 Amazon S3 对象时"expected string or bytes-like object"



当我尝试测试用 Python 3.7 boto3 AWS 开发工具包编写的以下 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()

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

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

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

由于存储桶名称和键应该是字符串

import boto3
bucketName = "your bucketname"
s3 = boto3.resource('s3')
s3.Object(bucketName, key).delete()

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

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['内容']的结构,如果你需要获取任何其他细节:

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

相关内容

  • 没有找到相关文章

最新更新