7

特定のファイルをrarアーカイブからメモリに読み込む方法を探しています。具体的には、番号が付けられた画像ファイルのコレクションです(私はコミックリーダーを書いています)。これらのファイルを単純に解凍して、必要に応じてロードすることはできますが(完了したら削除する)、可能であればそれを避けたいと思います。

とはいえ、可能であればクロスプラットフォーム(Windows / Linux)のソリューションをお勧めしますが、Linuxは必須です。同様に重要なこととして、これを処理するライブラリを指摘する場合は、無料(ビールの場合のように)またはOSSでなければならないことを理解してください。

4

7 に答える 7

9

rarfileモジュールを参照してください。

于 2009-07-27T00:54:58.740 に答える
6

本当の答えは、図書館がないということです、そしてあなたはそれを作ることができません。rarfileを使用することも、7zip unRAR(7zipよりも無料ではありませんが、ビールのように無料です)を使用することもできますが、どちらの方法でも外部実行可能ファイルが必要です。unRARのソースコードを取得することはできますが、それを変更することはできず、ライブラリに変換すると違法な変更になるため、RARのライセンスには基本的にこれが必要です。

また、ソリッドRARアーカイブ(最適に圧縮されたもの)にランダムにアクセスすることはできないため、とにかくすべてをアーカイブ解除する必要があります。WinRARは、これを回避しているように見えるUIを提供しますが、実際には、バックグラウンドでアーカイブを解凍して再パックしているだけです。

于 2009-07-27T01:11:12.210 に答える
3

pyUnRAR2ライブラリは、RAR アーカイブからメモリ (および必要に応じてディスク) にファイルを抽出できます。これは MIT ライセンスの下で利用でき、Windows では UnRAR.dll をラップし、Unix では unrar をラップするだけです。使用例は「QuickTutorial」をクリック。

Windows では、RARSetCallback() を使用してコールバックを設定し、RAR_EXTRACT オプションの代わりに RAR_TEST オプションを指定して RARProcessFile() を呼び出すことにより、(含まれている) UnRAR.dll を使用して (ディスクではなく) メモリに抽出できます。ファイルをディスクに。その後、コールバックは UCM_PROCESSDATA イベントを監視してデータを読み取ります。UCM_PROCESSDATA イベントのドキュメントから: 「解凍されたデータを処理します。実際にファイルをディスクに抽出することなく、抽出またはテスト中にファイルを読み取るために使用される場合があります。」

Unix では、unrar は単純にファイルを stdout に出力できるため、ライブラリは unrar の stdout に接続されたパイプから読み取るだけです。必要な unrar バイナリは、"Print file to stdout" コマンドの "p" を持つものです。「apt-get install unrar」を使用して、Ubuntu にインストールします。

于 2010-07-01T02:47:34.347 に答える
2

rarsoft が二次的著作物に課している制限は、unrar ソース コードを使用して RAR圧縮アルゴリズムのバリエーションを作成してはならないということのようです。コンテキストからは、ファイルを解凍するために彼のコード (変更されているかどうかに関係なく) を使用することを明確に許可しているように見えますが、独自の圧縮コードを作成する場合は使用できません。以下は、ダウンロードした license.txt ファイルからの直接の引用です。

  1. UnRAR ソースは、RAR アーカイブを無制限に無料で処理するために任意のソフトウェアで使用できますが、独自の RAR 圧縮アルゴリズムを再作成するために使用することはできません。変更された UnRAR ソースを別の形式で、または他のソフトウェアの一部として配布することは許可されますが、そのコードは RAR (WinRAR) 互換アーカイバーの開発に使用できないことがドキュメントおよびソース コメントに明確に記載されている場合に限ります。

誰もが CBR (rar) ファイルからの画像の読み取りを処理できるコミック ビューアーを作成できるようにする何かを望んでいるように見えたので、提供されたソース コードを使用することを妨げるものがあると人々が考える理由がわかりません。

于 2010-12-14T05:19:23.600 に答える
1

RAR は独自の形式です。公開された仕様はないと思います。そのため、サードパーティのツールとライブラリのサポートは貧弱または存在しません。

ZIP を使用する方がはるかに優れています。完全に無料で、正確な公開仕様があり、圧縮ライブラリはどこでも利用でき (zlib は世界で最も広く展開されているライブラリの 1 つです)、コーディングが非常に簡単です。

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

于 2009-07-27T01:43:50.593 に答える
0

Pythonの「struct」モジュールを見てください。次に、PythonプログラムでRARファイル形式を直接解釈できるため、外部ソフトウェアに依存せずにRAR内のコンテンツを取得できます。

編集:これはもちろんバニラPythonです-サードパーティのモジュールを使用する代替手段があります(すでに投稿されています)。

編集2:ウィキペディアの記事によると、私の答えはあなたに著者からの許可が必要だろう。

于 2009-07-27T00:55:33.250 に答える
0

無料の7zipライブラリはRARファイルも処理できます。

于 2009-07-27T00:58:02.673 に答える