Как удалить файлы, которые соответствуют определенному шаблону в корзине S3? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть корзина S3, в которой я сохраняю файлы CSV для загрузки их в Redshift. Для этого я использую Python и Boto3 . После загрузки их в Redshift я хочу удалить определенные файлы, которые соответствуют шаблону, который содержит идентификатор обработки для моего кода.

Я сохраняю свои файлы в корзину S3 следующим образом

Redshift{processingID}-table1.csv
Redshift{processingID}-table2.csv
Redshift{processingID}-table3.csv
Redshift{processingID}-table4.csv

После обработки тех файлов, которые содержат определенный идентификатор, я хочу удалить обработанные файлы из моего S3 bucket . Как указать шаблон.

Это шаблон, который я пытаюсь удалить из корзины.

Redshift11-*.csv. Здесь 11 - это processingID . Как удалить все файлы, которые соответствуют шаблону, используя boto3 ?

Я сталкивался с этим. https://stackoverflow.com/a/53836093/4626254

Но похоже, что он ищет папку в качестве префикса, а не точный шаблон файла.

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Вы можете выполнять фильтрацию префиксов на стороне сервера, но вам придется выполнять фильтрацию суффиксов на стороне клиента. Например:

import boto3
s3 = boto3.resource('s3')

bucket = s3.Bucket('mybucket')
files = [os.key for os in bucket.objects.filter(Prefix="myfolder/Redshift11-")]
csv_files = [file for file in files if file.endswith('.csv')]

print(f'All files: {files}')
print(f'CSV files: {csv_files}')
0 голосов
/ 20 октября 2019

Нет способа сказать S3, что нужно удалять файлы, которые соответствуют определенному шаблону - вам нужно просто удалять один файл за раз. Вы можете перечислить ключи с определенным префиксом

ex: Redshift или application_name_used_as_prefix), изменив имя файла так, чтобы оно имело уникальный префикс.

Или, если вынужно полагаться на регулярное выражение, тогда вы должны указать начальное и конечное правила, такие как:

import re

pattern = r"Redshift([0-9]+)-(\w+).csv$"
re.match(pattern, 'Redshift2-table1.csv')

Надеюсь, это поможет!

...