使用Python在tar.bz2文件中组织文件

3
我有大约200,000个文本文件存放在一个bz2文件中。我的问题是,当我扫描bz2文件以提取所需数据时,速度非常慢。必须浏览整个bz2文件才能找到我要查找的单个文件。有没有办法加快这个过程?
此外,我考虑可能将文件组织在tar.bz2中,以便可以知道在哪里查找。有没有办法组织放入bz2的文件?
更多信息/编辑: 我需要为每个文本文件查询压缩文件。有没有更好的压缩方法,可以支持如此多的文件,并进行彻底的压缩?

你是否正在寻找使用Python完成这个任务的方法?或者您是否接受其他方式? - Manoj Govindan
2个回答

6

你必须使用bzip2吗?从它的文档可以看出,它并不支持随机访问。也许你应该使用更符合你要求的压缩格式。好老的Zip格式支持随机访问,但可能会压缩得更差。


是的,我正要写同样的评论。 - Eike
7zip是另一种比bzip2压缩更好的选择,并且具有Python绑定。我不知道它对随机访问的支持情况如何。 - Gilles 'SO- stop being evil'
7zip只是bzip2或LZMA的容器--我认为它尝试多种算法并使用结果最好的算法。 - Katriel
哦,我明白你的意思了。实际上,我最初使用了压缩的 zip 文件编写了这个程序,但是我遇到了文件数量的问题。我无法克服 zip 文件中只能有 64k 个文件的事实。我需要空间来存放 200k 个文件。 - xZel
@xZek - 我不知道除了zip之外还有哪些文件归档工具支持你想要的随机访问方式。为什么不直接将这些文件在文件系统中提供出来呢? - Omnifarious

0

Bzip2默认以大块(900 KiB)压缩。一种可以显著加快扫描tar文件速度的方法是,将每个文件单独压缩,然后将结果一起打包成tar文件。这本质上就是Zip格式文件所采用的方法(尽管使用的是zlib压缩而不是bzip2)。但是,您可以轻松地获取tar索引,并且只需解压缩您要查找的特定文件。

我认为大多数tar程序并没有提供太多有意义的文件组织能力,尽管您可以编写一个程序来处理您的特殊情况(我知道Python有tar写入库,尽管我只用过一两次)。但是,您仍然需要在找到所需内容之前解压大部分数据的问题。


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