С использованием библиотеки boto3 в Python мы извлечем все ключи корзины s3 на уровне подпапки. В статье описывается получение ключей внутри бакета S3 на уровне subfolder с помощью Python. В этом заметке я покажу вам, как использовать библиотеку Python boto3 для доступа к содержимому бакета на Amazon S3, включая все подпапки внутри корзины.
Amazon S3 — это популярный облачный сервис хранения, предлагаемый Amazon Web Services (AWS). Он позволяет пользователям хранить и извлекать данные из различных приложений через интернет. Это делает его идеальным выбором для хранения и организации больших объемов данных. Если вы работаете с S3 и Python, библиотека boto3 будет отличным выбором.
Пример: 1
Как получить все ключи внутри корзины, если количество объектов ≤ 1000?
import boto3
client = boto3.client('s3')
response = client.list_objects_v2(Bucket='mybucket')
for content in response.get('Contents', []):
print(content['Key'])
PythonЭто не вернет все ключи, если количество объектов ≥ 1000. Если количество объектов ≥ 1000, переходим к примеру 2.
Пример: 2
Как получить все ключи внутри корзины, если количество объектов ≥ 1000?
Используя boto3.resource
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
for obj in bucket.objects.all():
print(obj.key)
PythonИспользуя boto3.client
def get_all_s3_keys(bucket):
"""Get a list of all keys in an S3 bucket."""
s3 = boto3.client('s3')
kwargs = {'Bucket': bucket}
while True:
resp = s3.list_objects_v2(**kwargs)
for content in resp.get('Contents', []):
print(content['Key'])
try:
kwargs['ContinuationToken'] = resp['NextContinuationToken']
except KeyError:
break
# Here kwargs is simple dictionary that is used to pass parameters
# to any function
PythonИз приведенных выше примеров видим, что использование boto3.resource более простое при работе с количеством объектов ≥ 1000. Поэтому я буду использовать boto3.resource в последующих примерах.
Пример: 3
Как получить все ключи внутри subfolder бакета?
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
prefix="subfolder1/sub_subfolder1/....."
for object_summary in bucket.objects.filter(Prefix=prefix):
print(object_summary.key)
PythonПример: 4
Как получить все ключи внутри subfolder бакета, которые заканчиваются специальным расширением?
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
for object_summary in bucket.objects.filter(Prefix="subfolder1/sub_subfolder1"):
key = object_summary.key
if key.endswith(".csv"):
print(key)
PythonВсе примеры для получение ключей внутри бакета S3 на уровне subfolder:
import boto3
def get_matching_s3_objects(bucket, prefix="", suffix=""):
"""
Generate objects in an S3 bucket.
:param bucket: Name of the S3 bucket.
:type bucket: str
:param prefix: Only fetch objects whose key starts with this prefix (optional).
:type prefix: tuple, list, str
:param suffix: Only fetch objects whose keys end with this suffix (optional).
:type suffix: str
:return: None
:rtype:
"""
if isinstance(prefix, str):
prefixes = (prefix, )
else:
prefixes = prefix
s3 = boto3.resource('s3')
my_bucket = s3.Bucket(bucket)
for key_prefix in prefixes:
for object_summary in my_bucket.objects.filter(Prefix=key_prefix):
key = object_summary.key
if key.endswith(suffix):
print(key)
if __name__ == '__main__':
# Example 1
get_matching_s3_objects("bucket_name")
# Example 2
get_matching_s3_objects("bucket_name", "subfolder1")
# Example 3
get_matching_s3_objects("bucket_name", "subfolder1/sub_subfolder2")
# Example 4
get_matching_s3_objects("bucket_name", ["subfolder1", "subfolder2"])
# Example 5
get_matching_s3_objects("bucket_name", ("subfolder1", "subfolder2"))
# Example 5
get_matching_s3_objects("bucket_name", ("subfolder1", "subfolder2/sub_subfolder1"), ".csv")
# Example 5
get_matching_s3_objects("bucket_name", ["subfolder1/sub_subfolder1", "subfolder2/sub_subfolder1"], ".parquet")
PythonРазница между boto3 client и resource
boto3 Client:
- Это оригинальное абстрактное API boto3
- Обеспечивает доступ к службам AWS на низком уровне
- Все операции служб AWS поддерживаются клиентами
- Предоставляет доступ к botocore клиенту разработчику Обычно соответствует 1:1 с API службы AWS
boto3 Resource:
- Это более новое абстрактное API boto3
- Предоставляет API высокого уровня, ориентированное на объекты
- Не обеспечивает 100% покрытия API служб AWS
Примечание: Если вы копируете код отсюда, обратите внимание на ошибки, которые могут возникнуть из-за отступов. Если у вас возникнут другие ошибки, пожалуйста, прокомментируйте.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.