Размер несжатого файла Python bz2
Я использую Python 2.7. У меня есть файл.bz2, и мне нужно выяснить размер несжатого файла его компонента, не распаковывая его. Я нашел способы сделать это для файлов gzip и tar. Кто-нибудь знает способ для файлов bz2?
Спасибо большое
3 ответа
Я подозреваю, что это невозможно из-за природы формата bz2 и методов сжатия, которые он использует. Вот довольно хорошее описание как формата, так и алгоритмов http://en.wikipedia.org/wiki/Bzip2
Вы никогда не узнаете исходный размер данных, пока не распакуете их.
Как указывалось в других ответах, это невозможно без распаковки данных. Однако, если размер распакованных данных велик, это можно сделать, распаковав их в виде фрагментов и добавив размер фрагментов:
>>> import bz2
>>> with bz2.BZ2File('data.bz2', 'r') as data:
... size = 0
... chunk = data.read(1024)
... while chunk:
... size += len(chunk)
... chunk = data.read(1024)
...
>>> size
11107
В качестве альтернативы (и, вероятно, быстрее, хотя я не профилировал это), вы можете seek()
в конец файла, а затем использовать tell()
чтобы узнать, как долго это происходит:
>>> import bz2
>>> import os
>>> with bz2.BZ2File('data.bz2', 'r') as data:
... data.seek(0, os.SEEK_END)
... size = data.tell()
...
>>> size
11107L
Кажется, что определить размер файла bz2 без его распаковки невозможно. См. Ссылку для получения дополнительной информации и возможного решения: https://superuser.com/questions/53984/is-there-a-way-to-determine-the-decompressed-size-of-a-bz2-file