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

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

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

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

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

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

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽