Python bz2未压缩文件大小

时间:2012-09-28 21:39:31

标签: python compression

我正在使用Python 2.7。我有一个.bz2文件,我需要弄清楚其组件文件的未压缩文件大小,而不实际解压缩它。 我已经找到了为gzip和tar文件执行此操作的方法。有人知道bz2文件的方法吗?

非常感谢

3 个答案:

答案 0 :(得分:4)

正如其他答案所述,如果不解压缩数据,这是不可能的。但是,如果解压缩数据的大小很大,可以通过在块中解压缩并添加块的大小来完成:

>>> 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

答案 1 :(得分:2)

我怀疑这是不可能的,因为 bz2 格式的性质和它使用的压缩技术。以下是对格式和算法http://en.wikipedia.org/wiki/Bzip2#File_format

的非常好的描述

在解压缩之前,您永远不会知道原始数据大小。

答案 2 :(得分:0)

似乎在没有实际解压缩的情况下告诉bz2文件的大小是不可能的。有关详细信息和可能的解决方案,请参阅链接: https://superuser.com/questions/53984/is-there-a-way-to-determine-the-decompressed-size-of-a-bz2-file