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

Python 如何删除S3 boto3中的多个文件和特定模式,python,amazon-web-services,amazon-s3,Python,Amazon Web Services,Amazon S3,Python可以删除S3中特定的多个文件吗 我想删除多个具有特定扩展名的文件 此脚本将删除所有文件 以下是我要删除的各种特定文件: XXX.tar.gz XXX.txt **当前代码:*(已删除所有文件) 如果有人知道,请告诉我。假定您要从给定的存储桶和前缀中删除*.tar.gz和*.txt文件,这将起作用: 导入boto3 s3_resource=boto3.resource('s3') bucket=s3_resource.bucket('my-bucket')) objects=buck

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

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

此脚本将删除所有文件

以下是我要删除的各种特定文件:

XXX.tar.gz
XXX.txt
**当前代码:*(已删除所有文件)


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

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

导入boto3
s3_resource=boto3.resource('s3')
bucket=s3_resource.bucket('my-bucket'))
objects=bucket.objects.filter(前缀='myfolder/')
如果o.Key.endswith('.tar.gz')或o.Key.endswith('.txt'),则对象中的o的对象_to_delete=[{'Key':o.Key}]
如果len(对象\u至\u删除):
s3_resource.meta.client.delete_对象(Bucket='my-Bucket',delete='objects':objects_to_delete})

您能澄清一下您的问题吗?您是说您只想删除特定文件,但脚本当前正在删除所有文件?这是正确的,因为最后一行是列出所有对象。您是否只需要删除
*.tar.gz
*.txt
文件?旁注:您不应该将AWS凭据放在代码文件中(这对安全性有害!)。相反,请使用AWS CLI
AWS configure
命令将它们存储在配置文件中。请再次原谅,如果我想删除两个以上的文件夹。。我需要复制像你这样的脚本好几次。或者如果我不那样做?添加了一行objects=bucket.objects.filter(Prefix=“myfolder2”)
bucket=s3\u resource.bucket(“my-bucket”)objects=bucket.objects.filter(Prefix=“myfolder1”)objects=bucket.objects.filter(Prefix=“myfolder2”)objects\u to\u delete=[{'Key':o.Key}表示对象中的o,如果o.Key.endswith('.tar.gz'))或o.Key.endswith('.txt')]
一个选项是简单地检索所有对象的列表,然后在Python中进行过滤(除了使用
endswith()
之外,还使用
startswith()
)。这样,只需一次调用即可列出对象。
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)