python-3.x - 无法从版本化的 s3 存储桶中删除项目
问题描述
我正在尝试.jpg
从 s3 存储桶中删除特定文件。我尝试了许多不同的方法,例如delete_object
和其他几个堆栈溢出答案。它们都没有正常工作,并导致程序每次都以不同的退出代码崩溃。下面的代码不会使程序崩溃,但存储桶保持不变。有谁知道如何解决这一问题?
s3 = boto3.resource('s3')
s3.Object('my-bucket', 'label_file').delete()
当打印呼叫的响应时,这是打印到终端的消息。
{
'ResponseMetadata': {
'RequestId': 'FJEOSIJFIO2J31',
'HostId': 'VEt+tpQ+DSAW5UTx/+kGgmE0JX43345lX2ULHMDSDrKye1PsTA3Eo=',
'HTTPStatusCode': 314,
'HTTPHeaders': {
'x-amz-id-2': 'VEt+tpQo2DAS6z+m8o3215UTx/+kGgmE0JX2DSi3ULHMDrKyevPsTA3Eo=',
'x-amz-request-id': 'T255WdZ732sVDWJF',
'date': 'Wed, 07 Apr 2021 19:28:04 GMT',
'x-amz-version-id': '4gi8EtDS27ZNy221tkziO',
'x-amz-delete-marker': 'true',
'server': 'AmazonS3'
},
'RetryAttempts': 0
},
'DeleteMarker': True,
'VersionId': '4gioU7FD36t5hcX21IOtkziO'
}
解决方案
您也可以删除单个对象版本。
import boto3
bucket_name = "mybucket"
objects_to_delete = ['label_file', 'label_file1']
bucket = boto3.resource('s3').Bucket(bucket_name)
versions = bucket.object_versions.all()
# if you wanna delete all of them removing the check will be enough
for version in versions:
if version.object_key in objects_to_delete:
version.delete()
如果您愿意,您也可以使用创建删除过滤器filter
object_summary_iterator = bucket.objects.filter(
Delimiter='string',
EncodingType='url',
Marker='string',
MaxKeys=123,
Prefix='string',
RequestPayer='requester',
ExpectedBucketOwner='string'
)
这里还有另一个很好的例子Delete all versions of an object in S3 using python?
推荐阅读
- python - 初始化神经网络模型kfold
- javascript - creating 2d image sprite from 3d solidworks model
- eclipse-oxygen - Eclipse:发生错误,请参阅日志文件配置
- python - 在 Pandas 上打开多行 Json 会导致列中未分隔键
- javascript - 电子邮件中的流星href
- python-3.x - 数据集中的模式识别
- javascript - div 动态创建,但图像不附加到它
- javascript - Router-outlet 使用 Bootstrap 在我的 Angular 应用程序中创建一个间隙或空间
- android - 通过在画布上写入在 TextView 上显示文本 - 文本被修剪
- sql - 显示在 TRN 文件中运行的查询