【问题标题】:Python bz2 uncompressed file sizePython bz2 未压缩文件大小
【发布时间】:2012-09-28 21:39:31
【问题描述】:

我正在使用 Python 2.7。我有一个 .bz2 文件,我需要在不实际解压缩的情况下计算出其组件文件的未压缩文件大小。 我已经找到了对 gzip 和 tar 文件执行此操作的方法。有人知道 bz2 文件的方法吗?

非常感谢

【问题讨论】:

    标签: python compression


    【解决方案1】:

    正如其他答案所述,如果不解压缩数据,这是不可能的。但是,如果解压后的数据量很大,可以通过分块解压并加上块的大小来实现:

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

    【讨论】:

    • 我没有尝试 chunk 方法,但是这里描述的 seek() 和 tell() 方法效果很好。
    • 我用seek() & tell() 对未压缩大小约为1.2G的文件进行了第二种方式的测试。似乎与解压缩文件并根据花费的时间计算大小没有太大区别。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】: