2009-07-27 80 views
6

我正在尋找一種方法將rar檔案中的特定文件讀入內存。具體來說,他們是編號圖像文件的集合(我在寫漫畫閱讀器)。雖然我可以簡單地解壓縮這些文件並根據需要加載它們(在完成時刪除它們),但如果可能,我寧願避免這種情況。如果可能的話,我更喜歡跨平臺(Windows/Linux)的解決方案,但Linux是必須的。同樣重要的是,如果你要指出一個圖書館來處理這個問題,請理解它必須是免費的(如啤酒)或OSS。在Python中將RAR文件的內容讀入內存中

回答

4

真正的答案是沒有圖書館,你不能做一個。你可以使用rarfile,或者你可以使用7zip unRAR(它比7zip更自由,但仍然像啤酒一樣自由),但是這兩種方法都需要外部可執行文件。 RAR許可證基本上要求這樣做,因爲雖然可以獲得unRAR的源代碼,但不能以任何方式對其進行修改,並將其轉換爲庫將構成非法修改。

此外,固態RAR壓縮文件(壓縮最好)不能隨機訪問,因此無論如何您必須解壓整個文件。 WinRAR提供了一個似乎可以避免這種情況的UI,但實際上它只是在後臺解壓縮和重新打包存檔。

7
+0

是的,我正要發佈這個。儘管OP可能只是搜索「python rar」... ... – Kiv 2009-07-27 00:56:36

+3

您不幸的是仍然需要unrar才能正常工作 - 這只是運行外部實用程序的一個不錯的API。 – 2009-07-27 01:05:50

+0

@kiv在我的防守中,我確實在谷歌上做過類似的事情,但主要發現了奇爾卡特圖書館的信息。它看起來像rarfile仍然依賴unrar。 – 2009-07-27 01:17:37

0

看Python的 「結構」 模塊。然後,您可以直接在您的Python程序中解釋RAR文件格式,從而可以在不依賴外部軟件的情況下檢索RAR中的內容。

編輯:這當然是香草Python - 有使用第三方模塊(如已發佈)的替代品。

編輯2:根據Wikipedia's article我的回答將要求您從作者的許可。

+0

我認爲這可能會讓你陷入一片黑暗的法律領域。 (我懷疑rarfile做的是沒有授權RAR允許你做什麼的限制)。 – 2009-07-27 01:12:52

+0

你是說文件格式有專利嗎? – 2009-07-27 02:11:36

+0

有效的一點。我沒有想到法律後果:) – 2009-07-27 02:11:54

1

RAR是專有格式;我不認爲有任何公開說明,所以第三方工具和庫支持很差,不存在。

你用ZIP更好;它是完全免費的,具有準確的公開規範,壓縮庫在任何地方都可用(zlib是世界上部署最廣泛的庫之一),並且編碼起來非常簡單。 (如果你想和磁盤)

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

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可以簡單地將文件打印到標準輸出,因此庫只是從連接到unrar的標準輸出的管道讀取數據。您需要的unrar二進制文件是「打印文件到標準輸出」命令的「p」。使用「apt-get install unrar」在Ubuntu上安裝它。

2

似乎rarsoft對衍生作品施加的限制是,您可能不會使用unrar源代碼來創建壓縮算法的變體RAR COMPARESSION算法。從上下文來看,它似乎是特別允許人們使用他的代碼(修改或不是)來解壓縮文件,但如果您打算編寫自己的壓縮代碼,則不能使用它們。下面是我剛剛下載的license.txt文件直接引:

  1. 的的UnRAR源可以在任何軟件可以用來處理RAR 檔案沒有免費的侷限性,但不能用於 重新創建RAR壓縮算法,這是專有的。 允許以單獨形式或作爲其他軟件的一部分分發修改的UnRAR源文件,只要它明確指出 在文檔和源註釋中說明代碼可能不會用於開發兼容RAR(WinRAR)的歸檔程序的 。

看到大家似乎只是想讓他們寫一個漫畫閱讀器能夠處理來自CBR(rar)文件的閱讀圖像,我不明白爲什麼人們認爲有什麼阻止他們使用提供了源代碼。

相關問題