Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和boto3删除S3对象时出现问题_Python_Amazon S3_Boto3 - Fatal编程技术网

使用python和boto3删除S3对象时出现问题

使用python和boto3删除S3对象时出现问题,python,amazon-s3,boto3,Python,Amazon S3,Boto3,我正在努力从AWS S3存储桶中删除不需要的文件,然后再将其转换为长期冰川存储。我正在使用Python和boto3运行以下脚本: import boto3 s3 = boto3.resource('s3') bucket = s3.Bucket(<mybucketname>) for obj in bucket.objects.all(): if '.DS_S' in obj.key or '.ini' in obj.key: item_obj = s3

我正在努力从AWS S3存储桶中删除不需要的文件,然后再将其转换为长期冰川存储。我正在使用
Python
boto3
运行以下脚本:

import boto3

s3 = boto3.resource('s3')

bucket = s3.Bucket(<mybucketname>)

for obj in bucket.objects.all():
    if '.DS_S' in obj.key or '.ini' in obj.key:
        item_obj = s3.Object(obj.bucket_name, obj.key)
        print(obj.key, item_obj.content_length)
        del_resp = item_obj.delete()
        print("Delete response for", obj.key, "is\n", del_resp)
导入boto3
s3=boto3.resource('s3')
bucket=s3.bucket()
对于bucket.objects.all()中的obj:
如果obj.key中的“.DS_S”或obj.key中的“.ini”:
item_obj=s3.对象(obj.bucket_名称,obj.key)
打印(对象键、项目内容和长度)
del_resp=项目对象删除()
打印(“删除响应”,obj.key,“is\n”,del_resp)
根据-
delete
方法应该返回一个包含3个结果的dict-,但下面是我从其中一个调用中看到的响应的示例-,它不是文档中的内容:

相机图片/数码图片/相机06-08/.DS_商店24580 删除摄像头图片/Digi图片/camera 06-08/的响应。DS_存储为 {'ResponseMetadata':{'RequestId':'3B5CA1A9B0766A6B','HostId':'HDWyoQg+RNrRZRC3nvqD8kR4bKDuMkTqDf7a7gGSD0lRUvucg56W76hG0+VP8BZ04oq+INSQUEY=','HTTPStatusCode':204,'HTTPHeaders':{'x-amz-id-2':'hdwyogg+RNrRZRC3nvqD8kR4bKDuMkTqDf7a7gGSD0lRUvucg56W76hG0+VP8BZ04oq+INsQUIY=','x-amz-request-id':'3B5CA1A9B0766A6B','date:'2019年2月7日16:00:26格林威治标准时间','server':'AmazonS3','RetryAttempts':0}

这个响应有一个204的http响应——因此它似乎在某种程度上是成功的——但是当我查看S3存储桶时——文件没有被删除。我没有收到任何Python错误代码


有什么想法吗?

没有创建一个新的对象吗?你不是在删除原始对象,而是在复制和删除副本

.object()
上,从:

子资源是创建子资源的新实例的方法 资源。此资源的标识符将传递给子资源。 有关子资源的更多信息,请参阅


原始代码似乎起作用了——但AWS S3实际执行删除操作花了一些时间——我无法以任何其他方式解释我看到的内容。我想要的文件现在已经不存在了。

你对Python有很好的理解,并且知道何时使用对象或对象的副本。但我现在认为我的错误是认为删除操作将立即发生。我根据您的建议对代码进行了一些更改-但这次我想删除的文件都不在那里-正如代码所示,并通过在AWS管理控制台中进行一些搜索确认。因此,原始代码似乎工作正常-S3实际执行删除操作只需要时间。需要多长时间大约需要多少时间。?