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

时间:2009-07-27 00:25:15

标签: python linux stream rar

我正在寻找一种方法将rar存档中的特定文件读入内存。具体来说,它们是编号图像文件的集合(我正在写一个漫画阅读器)。虽然我可以简单地解开这些文件并根据需要加载它们(完成后删除它们),但我希望尽可能避免这种情况。

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

7 个答案:

答案 0 :(得分:8)

答案 1 :(得分:4)

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

此外,无法随机访问固体RAR存档(最佳压缩文件),因此您无论如何都必须取消整个存档。 WinRAR提供了一个似乎避免这种情况的UI,但实际上它只是在后台解压缩并重新打包存档。

答案 2 :(得分:2)

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

  1. UnRAR源可以在任何软件中用于处理RAR   档案没有限制免费,但不能使用   重新创建专有的RAR压缩算法。   以单独形式或作为a。分发经修改的UnRAR源   允许使用其他软件的一部分,前提是它是明确的   在代码可能的文档和源代码注释中说明   不能用于开发RAR(WinRAR)兼容的归档器。
  2. 看到每个人似乎都想要一些能够让他们编写一个能够处理从CBR(rar)文件中读取图像的漫画查看器的东西,我不明白为什么人们认为有什么东西阻止他们使用提供的源代码

答案 3 :(得分:1)

RAR是一种专有格式;我认为没有任何公开规范,因此第三方工具和图书馆支持对于不存在而言很差。

使用ZIP会好得多;它是完全免费的,具有准确的公共规范,压缩库随处可用(zlib是世界上部署最广泛的库之一),并且编码非常简单。

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

答案 4 :(得分:1)

pyUnRAR2库可以将文件从RAR存档中提取到内存(如果需要,还可以从磁盘中提取)。它可以在MIT许可下使用,只需在Windows上包装UnRAR.dll,在Unix上包装unrar。单击“QuickTutorial”以获取用法示例。

在Windows上,通过使用RARSetCallback()设置回调,然后使用RAR_TEST选项而不是RAR_EXTRACT选项调用RARProcessFile(),它可以使用(包含的)UnRAR.dll提取到内存(而不是磁盘)避免将任何文件提取到磁盘。然后回调监视UCM_PROCESSDATA事件以读取数据。从UCM_PROCESSDATA事件的文档:“处理解压缩的数据。它可用于在文件被提取或测试时读取文件,而无需实际将文件解压缩到磁盘。”

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

答案 5 :(得分:0)

查看Python“struct”模块。然后,您可以直接在Python程序中解释RAR文件格式,从而可以检索RAR中的内容,而无需依赖外部软件为您执行此操作。

编辑:这当然是vanilla Python - 有些替代品使用第三方模块(已经发布)。

编辑2:根据Wikipedia's article,我的回答需要您获得作者的许可。

答案 6 :(得分:0)

free 7zip library也可以处理RAR文件。