Python 2.7 を使用しています。.bz2 ファイルがあり、実際に解凍せずに、そのコンポーネント ファイルの圧縮されていないファイル サイズを把握する必要があります。gzip および tar ファイルに対してこれを行う方法を見つけました。bz2 ファイルの方法を知っている人はいますか?
どうもありがとう
Python 2.7 を使用しています。.bz2 ファイルがあり、実際に解凍せずに、そのコンポーネント ファイルの圧縮されていないファイル サイズを把握する必要があります。gzip および tar ファイルに対してこれを行う方法を見つけました。bz2 ファイルの方法を知っている人はいますか?
どうもありがとう
他の回答が述べているように、これはデータを解凍しないと不可能です。ただし、解凍されたデータのサイズが大きい場合は、チャンクで解凍し、チャンクのサイズを追加することでこれを行うことができます。
>>> 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形式の性質と、それが使用する圧縮技術のために不可能であると思われます。これは、フォーマットとアルゴリズムの両方の非常に良い説明ですhttp://en.wikipedia.org/wiki/Bzip2#File_format
解凍するまで、元のデータ サイズはわかりません。
実際に解凍せずに bz2 ファイルのサイズを知ることは不可能のようです。詳細と考えられる解決策については、リンクを参照してください: https://superuser.com/questions/53984/is-there-a-way-to-determine-the-decompressed-size-of-a-bz2-file