如何删除S3 boto3中的多个文件和特定模式

Fan*_*gre 6 python amazon-s3 amazon-web-services

Python可以删除S3中的特定多个文件吗?

我想删除多个具有特定扩展名的文件。

此脚本删除所有文件。

这些是我要删除的各种特定文件:

XXX.tar.gz
XXX.txt
Run Code Online (Sandbox Code Playgroud)

** 当前代码:**(所有文件已删除)

import boto3

accesskey = "123"
secretkey = "123"
region = "ap-northeast-1"

s3 = boto3.resource ('s3', aws_access_key_id = accesskey, aws_secret_access_key = secretkey, region_name = region)

bucket = s3.Bucket ('test')
files = [os.key for os in bucket.objects.filter (Prefix = "myfolder / test /")]
tar_files = [file to file in files if file.endswith ('tar.gz')]

#print (f'All files: {files} ')
#print (f'CSV files: {csv_files} ')

objects_to_delete = s3.meta.client.list_objects (Bucket = "test", Prefix = "myfolder / test /")

delete_keys = {'Objects': []}
delete_keys ['Objects'] = [{'Key': tar_files} for tar_files in [obj ['Key'] for obj in objects_to_delete.get ('Content', [])]]

s3.meta.client.delete_objects (Bucket = "test", Delete = delete_keys)

Run Code Online (Sandbox Code Playgroud)

如果有人知道,请告诉我。

Joh*_*ein 12

假设您要从给定的存储桶和前缀中删除文件,这将起作用*.tar.gz*.txt

import boto3

s3_resource = boto3.resource('s3')

bucket = s3_resource.Bucket('my-bucket')
objects = bucket.objects.filter(Prefix = 'myfolder/')

objects_to_delete = [{'Key': o.key} for o in objects if o.key.endswith('.tar.gz') or o.key.endswith('.txt')]

if len(objects_to_delete):
    s3_resource.meta.client.delete_objects(Bucket='my-bucket', Delete={'Objects': objects_to_delete})
Run Code Online (Sandbox Code Playgroud)