在 Windows 上解压 bz2 文件

Decompressing bz2 files on Windows

我正在尝试使用以下代码片段解压缩 bz2 文件,该代码片段在各个地方提供:

bz2_data = bz2.BZ2File(DATA_FILE+".bz2").read()
open(DATA_FILE, 'wb').write(bz2_data)

但是,我得到的文件比我预期的要小得多。

当我使用 7z GUI 提取文件时,我收到一个大小为 248MB 的文件。但是,使用上面的代码,我得到的文件是 879kb。

当我读取提取的 XML 文件时,我可以看到文件的其余部分如我所料丢失。

我在 Windows 机器上 运行ning anaconda,据了解 bz2 在文件实际结束之前到达 EOF。

顺便说一句,我已经运行变成了this and this都没有用。

如果这是一个多流文件,那么 Python 的 bz2 模块(3.3 之前)不支持它:

Note This class does not support input files containing multiple streams (such as those produced by the pbzip2 tool). When reading such an input file, only the first stream will be accessible. If you require support for multi-stream files, consider using the third-party bz2file module (available from PyPI). This module provides a backport of Python 3.3’s BZ2File class, which does support multi-stream files.

另一种替代品:bz2file 应该可以。

如果是多流文件,您必须将mode设置为"r",否则它会自动失败(例如,按原样输出压缩数据)。

这应该可以满足您的要求:

with open(out_file_path) as out_file, BZ2File(bz2_file_path, "r") as bz2_file:
        for data in iter(lambda: bz2_file.read(100 * 1024), b""):
            out_file.write(data)

来自文档:

If mode is 'r', the input file may be the concatenation of multiple compressed streams.

https://docs.python.org/3/library/bz2.html#bz2.BZ2File