2021-08-09に投稿

Python 標準ライブラリ tarfile tarアーカイブファイル

ライブラリtarfileを使うと、tarアーカイブファイルの圧縮・展開を行えます。

tarアーカイブファイルの圧縮

open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)
でTarFileオブジェクトを作成後、ファイルを追加してtarアーカイブファイルを作成する。

既存のファイルを追加する場合はadd
バイト配列からファイルを作成する場合はaddfileを使う。

import tarfile
import io

with tarfile.open('./sample.tar.gz', 'w:gz') as f:
    f.add('./sample1.txt')
    f.add('./sample2.txt')
    f.add('./dir1/sample3.txt')

    bio = io.BytesIO()
    bio.write('テストファイル'.encode('utf-8'))
    tarinfo = tarfile.TarInfo("sample4.txt")
    tarinfo.size = bio.tell()
    bio.seek(0)
    f.addfile(tarinfo, bio)

    f.close()

tarアーカイブファイルの展開

  • getmembers アーカイブ内オブジェクト情報のリスト
  • getnames アーカイブ内オブジェクトの名称のリスト
  • getmember(name) 名称を指定してアーカイブ内オブジェクトの情報を取得
  • extractall(path=".", members=None, *, numeric_owner=False) アーカイブの展開
with tarfile.open('./sample.tar.gz', 'r') as f:
    print(f.getmembers())
    print(f.getnames())
    print(f.getmember("./sample1.txt"))
    f.extractall('extracted_tar')    
    f.close()

tarfile.openのmodeオプション

tarfile.openに指定できるmodeは以下の通り。

  • r 読み込み用オープン(推奨)
  • r: 非圧縮読み込み用
  • r:gz gzip圧縮読み込み用
  • r:bz2 bzip2圧縮読み込み用
  • r:xs lzma圧縮読み込み用
  • w 非圧縮書き込み用
  • w:gz gzip圧縮書き込み用
  • w:bz2 bzip2圧縮書き込み用
  • w:xs lzma圧縮書き込み用

参考

Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント