用Python将RAR文件的内容读入内存

2024-05-16 10:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种将特定文件从rar存档读入内存的方法。具体来说,它们是一组编号的图像文件(我正在写一个漫画阅读器)。虽然我可以简单地取消这些文件的排列并根据需要加载它们(完成后删除它们),但如果可能的话,我宁愿避免这样做。

尽管如此,如果可能的话,我更喜欢跨平台(Windows/Linux)的解决方案,但Linux是必须的。同样重要的是,如果你要为我指出一个图书馆来处理这个问题,请理解它必须是免费的(如啤酒)或开放源码软件。


Tags: 文件方法内存图书馆linuxwindows图像文件跨平台
3条回答

真正的答案是没有图书馆,你也做不到。您可以使用rarfile,也可以使用7zip unrr(它的可用空间小于7zip,但仍然像beer中那样是免费的),但是这两种方法都需要一个外部可执行文件。RAR的许可证基本上需要这样做,因为虽然您可以获得unrr的源代码,但是您不能以任何方式修改它,将其转换为库将构成非法修改。

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

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

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

在Unix上,unrr可以简单地将文件打印到stdout,因此库只从连接到unrr的stdout的管道中读取。您需要的unrr二进制文件是具有“p”for“Print file to stdout”命令的二进制文件。使用“apt get install unrr”在Ubuntu上安装它。

相关问题 更多 >