プロジェクト

全般

プロフィール

操作

12章学習記録 » 履歴 » リビジョン 1

リビジョン 1/4 | 次 »
Tatsuya ISHIGAKI, 2025/07/25 03:03


12.3 tar ファイルを扱う tarfile

gzip, bz2, lzma 形式で圧縮されたものを含む、tar 形式アーカイブを読み書きする

  • tar ファイルを操作する
    • 関数 open(name=None, mode='r', fileobj=None, bufsize=20240, **kwargs)

      • name tar ファイルのファイル名
      • mode モード指定 r w
        • 圧縮形式を指定する場合は r:gz w:xz 等 (非圧縮指定は w: 等)
        • 読み込み時は r だけでも、ファイル名拡張子から圧縮形式が自動判定される
        • 圧縮ファイルは追記モードが使用できない (a a: のみ)
      • fileobj tar ファイルのファイルオブジェクト
      • bufsize ブロックサイズ (デフォルトでよい)
      • 戻り値 tarfile.TarFile
    • 関数 is_tarfile(name)

      • name ファイル名、または file-like オブジェクト
      • 戻り値 (bool) 指定ファイルが tar 形式アーカイブなら True
    • TarFile オブジェクトのメソッド

      メソッド名 解説 戻り値
      getnames() tar ファイル内にアーカイブされているファイル名リスト list
      getmember(name) 指定ファイル名の TarInfo を返す TarInfo
      getmembers() tar ファイル内にアーカイブされている全ファイルの TarFile のリストを返す list
      extract(member, path="", set_attrs=True, *, numeric_owner=False) 指定ファイルを指定場所へ展開
      member:ファイル名またはTarInfo
      None
      extractall(path="", set_attrs=True, *, numeric_owner=False) 全ファイルを指定場所へ展開 None
      extractfile(member) 指定ファイルを開き、ファイルオブジェクトを返す
      member:ファイル名またはTarInfo
      ファイルオブジェクト
      add(name, arcname=None, recursive=True, exclude=None, *, filter=None) 指定ファイルを tar ファイルのアーカイブへ追加する
      arcnameを指定するとそのファイル名で追加
      ディレクトリ指定では再帰追加可能
      ?
      close() None
      >>> import tarfile
      >>> with tarfile.open("./testarchive.tar", "w:gz") as f:
      ...     f.add("./inArchive1.txt")
      ...
      >>> with tarfile.open("./testarchive.tar") as f:
      ...     f.getnames()
      ...     f.getmembers()
      ...
      ['./inArchive1.txt']
      [<TarInfo './inArchive1.txt' at 0x140b4104640>]
      >>> with tarfile.open("./testarchive.tar") as f:
      ...     with f.extractfile("./inArchive1.txt") as elem:
      ...         elem.read().decode("sjis")
      ...
      'アーカイブ内ファイル1'
      >>> with tarfile.open("./testarchive.tar") as f:
      ...     info = f.getmember("./inArchive1.txt")
      ...     info
      ...     print(f"{info.name=}, {info.size=}, {info.mtime=}, {info.mode=:o}")
      ...
      <TarInfo './inArchive1.txt' at 0x140b4104940>
      info.name='./inArchive1.txt', info.size=22, info.mtime=1753410842.0, info.mode=666
      >>> with tarfile.open("./testarchive.tar") as f:
      

Tatsuya ISHIGAKI さんが5ヶ月前に更新 · 4件の履歴