1

多くの試行錯誤を経て、PyLZMA を使用して lzma 圧縮ファイルを作成する方法を見つけましたが、フォルダーとそのすべてのファイル/ディレクトリを再帰的に圧縮するという一見単純なタスクを 7z ファイルに複製したいと考えています。私は7z.exeを介してそれを行うだけですが、プロセスが完了するまでプロセスのstdoutをキャッチできないようです。数百から数百の範囲のフォルダーを圧縮するため、7zファイルごとの進行状況が必要ですギガからテラバイトを超えるサイズまで。残念ながら、私が試したコードを提供することはできません.py7zlibを使用した例を見たのは、既存のファイルからファイルを抽出することだけだからです。これら2つの組み合わせで運が良かった人、または助けを提供できる人はいますか?

価値があるのは、これはWindowsでpython 2.7を使用することです。ここで発生する可能性のある魔​​法のマルチスレッドがあれば、特に lzma 圧縮がいかに遅いかを考えるとボーナスポイントです (ただし、ここでは時間は問題ではありません)。前もって感謝します!

4

1 に答える 1

2

純粋なPythonの代替手段は、標準ライブラリモジュールとラッパーモジュール.tar.xzの組み合わせでファイルを作成することです。これにより、アーカイブに匹敵するサイズのファイルが作成されます。tarfileliblzmapyliblzma.7z

import tarfile
import lzma

TAR_XZ_FILENAME = 'archive.tar.xz'
DIRECTORY_NAME = '/usr/share/doc/'

xz_file = lzma.LZMAFile(TAR_XZ_FILENAME, mode='w')

with tarfile.open(mode='w', fileobj=xz_file) as tar_xz_file:
    tar_xz_file.add(DIRECTORY_NAME)

xz_file.close()

トリッキーな部分は進捗レポートです。上記の例では、tarfile.TarFileクラスのディレクトリに再帰モードを使用しているため、addディレクトリ全体が追加されるまでメソッドは戻りません。

次の質問では、tarファイルの作成の進行状況を監視するための可能な戦略について説明します。

于 2012-10-30T00:14:09.527 に答える