Python 3.x 无法从版本控制的s3存储桶中删除项
我正在尝试从s3存储桶中删除特定的Python 3.x 无法从版本控制的s3存储桶中删除项,python-3.x,amazon-web-services,amazon-s3,Python 3.x,Amazon Web Services,Amazon S3,我正在尝试从s3存储桶中删除特定的.jpg文件。我尝试过许多不同的方法,比如delete\u object和其他几个堆栈溢出的答案。它们都没有正常工作,导致程序崩溃,每次都有不同的退出代码。下面的代码不会使程序崩溃,但bucket保持不变。有人知道如何解决这个问题吗 s3=boto3.resource('s3')) s3.对象('my-bucket','label_file')。删除() 打印呼叫响应时,这是打印到终端的消息 { “ResponseMetadata”:{ “请求ID”:“FJ
.jpg
文件。我尝试过许多不同的方法,比如delete\u object
和其他几个堆栈溢出的答案。它们都没有正常工作,导致程序崩溃,每次都有不同的退出代码。下面的代码不会使程序崩溃,但bucket保持不变。有人知道如何解决这个问题吗
s3=boto3.resource('s3'))
s3.对象('my-bucket','label_file')。删除()
打印呼叫响应时,这是打印到终端的消息
{
“ResponseMetadata”:{
“请求ID”:“FJEOSIJFIO2J31”,
“主机ID”:“VEt+tpQ+DSAW5UTx/+KGME0JX43345LX2ULHMDSDRKYE1PSTA3EO=”,
“HTTPStatusCode”:314,
“HTTPHeaders”:{
“x-amz-id-2”:“VEt+tpQo2DAS6z+m8o3215UTx/+KGME0JX2DSI3ULHMDRKYEVPSTA3EO=”,
“x-amz-request-id”:“T255WdZ732sVDWJF”,
“日期”:“2021年4月7日星期三19:28:04 GMT”,
“x-amz-version-id”:“4gi8EtDS27ZNy221tkziO”,
“x-amz-delete-MAKER':“true”,
“服务器”:“AmazonS3”
},
“RetryAttempts”:0
},
“DeleteMarker”:True,
“VersionId”:“4gioU7FD36t5hcX21IOtkziO”
}
您的S3存储桶已启用版本控制,因为您有:
'x-amz-delete-marker': 'true',
...
'DeleteMarker': True,
在回答中
AmazonS3中的删除标记是
在简单删除请求中命名的受版本控制的对象。因为
该对象位于启用版本控制的存储桶中,而该对象不在存储桶中
删除。但是delete标记使amazons3的行为就像它是
删除
因此,基本上,您必须删除标记,然后删除文件
如果要删除删除标记,它必须具有版本ID,并且
必须在删除对象版本ID请求中指定该ID。如果你
使用删除请求删除删除标记(不指定
删除标记的版本ID),Amazon S3不会删除删除标记
标记,但插入另一个删除标记
要删除删除标记和版本化文件,可以使用以下代码:
警告!这将有效地清除你的桶强>
def删除版本(目标存储桶:str)->无:
s3=boto3.resource(“s3”,region\u name=“您的s3\u bucket\u region\u goes\u here”)
桶=s3.桶(目标桶)
object\u version\u iterator=bucket.object\u versions.all()
对于对象版本迭代器中的对象版本:
key=object\u version.object\u key
object\u id=object\u version.id
打印(f“删除id为{object_id}的键:{key}”)
object_version.delete()
打印(f“完成{target_bucket}已清除。”)
您也可以删除单个对象版本
导入boto3
bucket_name=“mybucket”
objects_to_delete=['label_file','label_file1']
bucket=boto3.resource('s3')。bucket(bucket\u名称)
versions=bucket.object\u versions.all()
#如果你想全部删除,删除支票就足够了
对于版本中的版本:
如果version.object\输入要删除的对象:
version.delete()
如果需要,还可以使用filter
object\u summary\u迭代器=bucket.objects.filter(
分隔符=“字符串”,
EncodingType='url',
Marker='string',
MaxKeys=123,
前缀='string',
RequestPayer='requester',
预期BucketOwner='string'
)
这里还有一个很好的例子