Skip to content

Python で tar ファイルを操作する

Python は標準の tarfile モジュールで gzip、bz2、tar などの読み書きを行うことが出来ます (zip を扱う場合は zipfile モジュール)。

ファイルの内容を一覧表示する

ファイルの一覧を取得するには getmembers を利用します。

1
2
3
4
5
6
7
#!/usr/bin/env python3

import tarfile

with tarfile.open(name="sample.tar.gz", mode="r") as tar:
    for t in tar.getmembers():
        print(t.name)

ファイルを展開せずに 1 ファイルをオブジェクトとして取得する

特定のファイルを取得するには extract を利用します。 下記のサンプルでは tar アーカイヴに含まれる dir1/file1.txt というファイルを取得し、それをファイルに書き出しています。

1
2
3
4
5
6
7
8
#!/usr/bin/env python3

import tarfile

with tarfile.open(name="sample.tar.gz", mode="r") as tar:
    data = tar.extractfile("dir1/file1.txt")
    with open("file1.txt", "wb") as w:
        w.write(data.read())

1 ファイルだけ、展開する

tar アーカイヴに含まれる 1 ファイルを取得し、それを現在のディレクトリにファイルとして展開するには extract を利用します。 パラメータを指定することで別ディレクトリに展開することも可能です。 下記の例では現在のディレクトリから見て ./dir1/file1.txt というファイルを作成します (dir1 が存在しない場合は自動的に作成します)。

1
2
3
4
5
6
#!/usr/bin/env python3

import tarfile

with tarfile.open(name="sample.tar.gz", mode="r") as tar:
    tar.extract("dir1/file1.txt")

全てのファイルを展開する

tar アーカイヴに含まれる全てのファイルを展開するには extractall を利用します。

1
2
3
4
5
6
#!/usr/bin/env python3

import tarfile

with tarfile.open(name="sample.tar.gz", mode="r") as tar:
    tar.extractall()