web-dev-qa-db-ja.com

Pythonを使用して完全に圧縮されたtarファイルを作成する方法は?

Pythonで圧縮した.tar.gzファイルを作成するにはどうすればよいですか?

85
shahjapan

ディレクトリツリー全体に対して.tar.gz(別名.tgz)を構築するには:

import tarfile

def make_tarfile(output_filename, source_dir):
    with tarfile.open(output_filename, "w:gz") as tar:
        tar.add(source_dir, arcname=os.path.basename(source_dir))
145
import tarfile
tar = tarfile.open("sample.tar.gz", "w:gz")
for name in ["file1", "file2", "file3"]:
    tar.add(name)
tar.close()

Tar.bz2圧縮ファイルを作成する場合は、ファイル拡張子名を「.tar.bz2」に、「w:gz」を「w:bz2」に置き換えてください。

80
CNBorn

tarfile.openmode='w:gz'で呼び出します。これは、「gzip圧縮書き込み用に開く」ことを意味します。

ファイル名(nameへのopen引数)を.tar.gzで終了することもできますが、圧縮機能には影響しません。

ところで、通常、tarのモードでは、gzipで圧縮できるよりも、'w:bz2'で圧縮できるのと同じように、bzip2のモードでより良い圧縮が得られます。

30
Alex Martelli

以前の回答では、tarfile pythonモジュールを使用して.tar.gz Pythonのファイル。アーカイブの速度には重大な欠点がありますが、これは明らかに優れたpythonスタイルのソリューションです。 この質問 は、tarfileがLinuxで直接コマンドを呼び出すよりも約2倍遅いことを述べています。私の経験によると、この推定はかなり正しいです。

したがって、アーカイブを高速化するには、subprocessモジュールを使用して直接Linuxコマンドを使用できます。

subprocess.call(['tar', '-czf', output_filename, file_to_archive])
0