Перечислите все объекты в корзине S3 на MinIOPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Перечислите все объекты в корзине S3 на MinIO

Сообщение Anonymous »

У меня есть ведро с примерно 5 000 000 объектов внутри (как показано в веб-интерфейсе MinIO).
Мне нужно пройти по каждому отдельному объекту (а позже сделать некоторые обработка на них).

Чтобы протестировать функциональность, я хочу начать подсчитывать каждый отдельный объект (сумма которого должна составлять то же число, что сообщает MinIO)
Я пробовал использовать boto3, используя list_object, list_object_v2 и ресурс boto3, и, конечно же, используя нумерацию страниц, но безрезультатно.
Без префиксов (т. е. подсчета целое ведро) всегда кажется, что он насчитывает около 200 тыс. объектов (чуть меньше).
Когда я начинаю определять некоторые префиксы первого уровня, счетчик увеличивается.Я не могу позволить себе перечислить все префиксы, так как структура данных очень беспорядочная, и не все данные всегда находятся на «листовых путях» (т. е. некоторые данные могут находиться рядом с какой-то «подпапкой») )
Я инициализирую клиент/ресурс следующим образом:
import boto3

custom_config = Config(
retries = {
'max_attempts': 10,
'mode': 'standard'
},
signature_version='s3v4'
)

minio_client = boto3.client(
's3',
endpoint_url=,
aws_access_key_id=,
aws_secret_access_key=,
aws_session_token=None,
verify=False,
config=custom_config,
)

minio_resource = boto3.resource(
's3',
endpoint_url=,
aws_access_key_id=,
aws_secret_access_key=,
aws_session_token=None,
verify=False,
config=custom_config,
)


А затем я пытаюсь посчитать объекты как таковые:
bucket_name =

bucket = minio_resource.Bucket(bucket_name)

cnt = 0
try:
for page in bucket.objects.all(): # ! Also tried *.page_size(1000):
for obj in page:
cnt += 1
if cnt % 10000 == 0:
print("-------------------------------")
print(obj)
print(f"Processed {cnt} objects so far")

except Exception as e:
print(f"An error occurred: {e}")

print(f"Total objects counted: {cnt}")

try:
paginator = minio_client.get_paginator('list_objects_v2')

page_iterator = paginator.paginate(Bucket=bucket_name) # Or with prefixes: , Prefix=pfx)

for page in page_iterator:
for obj in page.get('Contents', []):
cnt += 1
if cnt % 10000 == 0:
print("-------------------------------")
print(obj)
print(f"Processed {cnt} objects so far")

except Exception as e:
print(f"An error occurred: {e}")

print(f"Total objects counted: {cnt}")


Подробнее здесь: https://stackoverflow.com/questions/787 ... t-on-minio
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Загрузите большой файл в Minio с объектов Minio
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Загрузите большой файл в Minio с объектов Minio
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Перечислите все имена папок в корзине AWS S3 в C# ASP.NET.
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Сортировка товаров WooCommerce по артикулам в корзине, мини-корзине и заказах.
    Гость » » в форуме Php
    0 Ответы
    108 Просмотры
    Последнее сообщение Гость
  • Перечислите месяцы между двумя датами
    Гость » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»