使用Python解压BZ2压缩文件夹

3

我想在特定的位置解压缩一个 bz2 压缩的文件夹。我可以通过以下方式看到其中的数据:

handler = bz2.BZ2File(path, 'r')
print handler.read()

我希望能够将这个压缩文件夹中的所有文件提取到一个由用户指定的位置,并保持文件夹内部的目录结构。

我对这门语言还比较陌生...请帮忙...

3个回答

5

BZ2与gzip一样,只能压缩单个文件,不能归档一个目录结构。我猜测你手头拥有的是一个由软件(如tar)首先创建的归档文件,然后再用BZ2进行压缩。为了恢复“完整的目录结构”,需要先解压缩Bz2文件,然后解压缩(或等效)文件。

幸运的是,Python的tarfile模块支持bz2选项,因此您可以一次完成此过程。


我该怎么做?提取BZ2文件部分?是否有一个函数可以直接获取未压缩的文件,还是我需要先读取bz2文件,然后将数据写入其他文件? - user2413801
打开一个tar.bz文件,就像打开一个普通的tar文件一样。Python的tarfile模块会处理剩下的事情。 - zmbq

2
bzip2是一种数据压缩系统,它可以压缩整个文件。它不像PKZip那样捆绑文件并将它们压缩。因此,在你的例子中,handler只有一个文件,没有“内部目录结构”。
另一方面,如果你的文件实际上是一个压缩的tar文件,你应该查看Python的tarfile模块,它会为你处理解压缩。

1

您需要使用tarfile模块来解压缩.tar.bz2文件...从这里的文档中,您可以了解如何进行操作:

import tarfile
tar = tarfile.open(path, "r:bz2")
for tarinfo in tar:
    print tarinfo.name, "is", tarinfo.size, "bytes in size and is",
    if tarinfo.isreg():
        print "a regular file."
        # read the file
        f = tar.extractfile(tarinfo)
        print f.read()
    elif tarinfo.isdir():
        print "a directory."
    else:
        print "something else."
tar.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接