Задать вопрос
@HighMan

Python как быстро получить число элементов архива tar.gz?

Здравствуйте, коллеги!
Есть архив arcname.tar.gz весом в пару ГБ. В этом архиве огромное количество мелких файлов. Много тысяч.
Есть какой-то способ быстро получить число всех файлов в архиве, или хотя бы, число всех элементов, включая каталоги?
with tarfile.open('arc.tar.gz', 'r:gz') as tar:
    print(len(tar.getmembers())

Да этот метод работает. Возвращает общее число элементов архива. Можно пробежаться по по массиву и выловить информацию, например, только о файлах. Метод всем хорошь, но, блин, долго!
Вышеприведенный код отрабатывает секунд за 15 на i9 и сам файл архива находится на SSD.
Мне же нужно как можно быстрее получить число элементов.
  • Вопрос задан
  • 275 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Не получится из-за специфики устройства tar-файла. Пока весь не прочитаешь, не узнаешь сколько в нём каталогов. Это потоковый формат, а тут он ещё и сжат сверху gzip'ом.

Это как посчитать быстро сколько вещей в чемодане. Пока по одной не вытащишь и каждую не посчитаешь - не узнаешь.
У других архиваторов, например zip, есть индексная табличка. Это как бумажка с перечнем всех вещей в чемодане. Она лежит прямо под крышкой и её можно достать первой.

Придётся как-то обходить эту проблему. Например использовать другой формат архива, или еред архивацией делать отдельный файл с перечнем всех файлов, и его класть в архив первым. А может быть вам и не нужно на самом деле количество элементов в архиве,а того, что вы этим количеством хотите добиться можно достичь иначе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽
AST Москва
До 350 000 ₽
Wanted. Москва
До 250 000 ₽
13 янв. 2025, в 23:21
2000 руб./в час
13 янв. 2025, в 23:16
10000 руб./за проект
13 янв. 2025, в 21:59
30000 руб./за проект