@HighMan

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

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

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

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

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

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

Похожие вопросы