在Python中将RAR文件的内容读入内存

我正在寻找一种方法来读取从rar档案到内存的特定文件。 具体来说,他们是编号图像文件的集合(我正在写一个漫画阅读器)。 虽然我可以简单地unrar这些文件,并根据需要加载(完成时删除它们),如果可能,我宁愿避免这种情况。

所有人都说,如果可能的话,我更喜欢跨平台(Windows / Linux)的解决scheme,但Linux是必须的。 同样重要的是,如果您要指出一个图书馆来处理这个问题,请理解它必须是免费的(如啤酒)或OSS。

Solutions Collecting From Web of "在Python中将RAR文件的内容读入内存"

真正的答案是没有一个图书馆,你不能做一个。 你可以使用rarfile,或者你可以使用7zip unRAR(这个比7zip免费,但在啤酒中还是免费的),但是这两种方法都需要一个外部的可执行文件。 RAR许可证基本上要求这样做,因为虽然您可以获得unRAR的源代码,但不能以任何方式对其进行修改,将其转换为库将构成非法修改。

此外,固体RAR档案(最好压缩)不能随机访问,所以你必须unarchive整个事情无论如何。 WinRAR提供了一个似乎可以避免这种情况的UI,但实际上它只是在后台解压缩和重新打包存档。

似乎rarsoft对衍生作品施加的限制是,您可能不会使用unrar源代码来创建RAR COMPRESSION算法的变体。 从上下文来看,它似乎是专门允许人们使用他的代码(修改或不是)来解压缩文件,但是如果您打算编写自己的压缩代码,则不能使用它们。 以下是我刚刚下载的license.txt文件的一个直接引用:

  1. UnRAR源可以在任何软件中用于处理RAR档案,而不受任何限制,但不能用于重新创建专有的RAR压缩算法。 只要在文档和源代码注释中明确指出代码不可用于开发兼容RAR(WinRAR)的归档程序,则允许以单独形式或作为其他软件的一部分分发修改的UnRAR源代码。

看到大家似乎只是想要一些能够让他们写一个能够处理从CBR(rar)文件中读取图像的漫画查看器的东西,我不明白为什么人们认为有什么阻止他们使用提供的源代码。

RAR是专有格式; 我不认为有任何公开的规格,所以第三方工具和库支持是不好的,不存在的。

使用ZIP你会好得多。 它是完全免费的,有一个准确的公开规范,压缩库在任何地方都是可用的(zlib是世界上最广泛部署的库之一),并且编码非常容易。

http://docs.python.org/library/zipfile.html

pyUnRAR2库可以从RAR档案中提取文件到内存(如果需要,还可以使用磁盘)。 它是根据MIT许可证提供的,只是将UnRAR.dll包装在Windows上,在Unix上包装unrar。 点击“QuickTutorial”查看使用示例。

在Windows上,通过使用RARSetCallback()设置回调,然后使用RAR_TEST选项(而不是RAR_EXTRACT选项)调用RARProcessFile(),可以提取内存(而不是磁盘)文件到磁盘。 该回调然后监视UCM_PROCESSDATA事件来读取数据。 从UCM_PROCESSDATA事件的文档:“处理解压后的数据。它可能用于读取正在提取或测试的文件,而不实际提取文件到磁盘。

在Unix上,unrar可以简单地将文件打印到标准输出,所以库只是从连接到unrar的标准输出的管道读取。 您需要的unrar二进制文件是“打印文件到标准输出”命令的“p”。 使用“apt-get install unrar”在Ubuntu上安装。

免费的7zip库也能够处理RAR文件。

看看Python的“结构”模块。 然后,您可以直接在您的Python程序中解释RAR文件格式,从而可以在不依靠外部软件的情况下检索RAR中的内容。

编辑:这当然是香草Python – 有使用第三方模块(已经发布)的替代品。

编辑2:根据维基百科的文章,我的答案将需要你从作者的许可。