我正在使用 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