Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - TAR圧縮

Python Python
スポンサーリンク

TAR圧縮は「大量ファイルを効率よくまとめる」ための業務向け技術

ZIP と並んでよく使われる圧縮形式が TAR(タール) です。
特に Linux・サーバー環境では TAR が標準的で、バックアップ・ログ保存・データ転送などで頻繁に使われます。

Python では tarfile モジュールを使うことで、フォルダ丸ごと・特定ファイルだけ・圧縮方式の選択など、柔軟な TAR 圧縮が可能です。

ここでは、初心者でも理解しやすいように、基本 → 応用 → 実務テンプレートの順で丁寧に解説します。


TAR圧縮の基本:tarfile.open と add()

最小構成:フォルダを TAR にまとめる

import tarfile

with tarfile.open("archive.tar", "w") as tar:
    tar.add("data")
Python

重要ポイント

  • "w" は「TAR(非圧縮)」で作成
  • add() にフォルダを渡すと、中のファイル・サブフォルダをすべて含めてくれる
  • ZIP と違い、TAR は「まとめるだけ」で圧縮はしない(後述)

TAR.GZ(gzip圧縮)で容量を減らす

gzip 付きで圧縮する(最も一般的)

import tarfile

with tarfile.open("archive.tar.gz", "w:gz") as tar:
    tar.add("data")
Python

深掘りポイント

  • "w:gz" は gzip 圧縮
  • ZIP より圧縮率が高いことが多い
  • Linux サーバーのバックアップで最もよく使われる形式

TAR.BZ2(bzip2圧縮)でさらに高圧縮

import tarfile

with tarfile.open("archive.tar.bz2", "w:bz2") as tar:
    tar.add("data")
Python

深掘りポイント

  • "w:bz2" は bzip2 圧縮
  • gzip より圧縮率が高いが、処理速度は遅い
  • 「容量を最優先したい」場合に向いている

TAR.XZ(xz圧縮)で最高クラスの圧縮率

import tarfile

with tarfile.open("archive.tar.xz", "w:xz") as tar:
    tar.add("data")
Python

深掘りポイント

  • "w:xz" は xz 圧縮
  • 圧縮率は最も高い
  • ただし圧縮時間は長い
  • 大容量バックアップでよく使われる

特定ファイルだけ TAR に追加する

拡張子フィルタと組み合わせる

import os
import tarfile

folder = "data"

with tarfile.open("csv_only.tar.gz", "w:gz") as tar:
    for name in os.listdir(folder):
        path = os.path.join(folder, name)
        if os.path.isfile(path) and name.lower().endswith(".csv"):
            tar.add(path, arcname=name)
Python

深掘りポイント

  • arcname を指定すると TAR 内の名前を自由に変更できる
  • 必要なファイルだけまとめる ETL 処理に最適

例題①:日付付き TAR.GZ バックアップを作成する

シナリオ

毎日 project フォルダを gzip 圧縮して保存したい。

import tarfile
from datetime import date

folder = "project"
today = date.today().strftime("%Y-%m-%d")
tar_name = f"backup_{today}.tar.gz"

with tarfile.open(tar_name, "w:gz") as tar:
    tar.add(folder)

print("バックアップ作成:", tar_name)
Python

深掘りポイント

  • 日付を付けることで世代管理がしやすくなる
  • gzip 圧縮は速度と圧縮率のバランスが良い

例題②:ログフォルダを TAR 圧縮して元ファイルを削除する(アーカイブ化)

シナリオ

ログを圧縮して容量を節約したい。

import os
import tarfile

folder = "logs"
tar_name = "logs_archive.tar.gz"

with tarfile.open(tar_name, "w:gz") as tar:
    tar.add(folder)

for name in os.listdir(folder):
    path = os.path.join(folder, name)
    if os.path.isfile(path):
        os.remove(path)

print("ログ圧縮&削除完了:", tar_name)
Python

深掘りポイント

  • TAR 圧縮後に削除することでディスク容量を大幅に節約
  • ログ管理の自動化で非常に役立つ
  • 削除前に TAR が正常に作成されたか確認するのが安全

例題③:複数フォルダをまとめて TAR にする

シナリオ

dataconfig を一つの TAR にまとめたい。

import tarfile

folders = ["data", "config"]

with tarfile.open("bundle.tar.gz", "w:gz") as tar:
    for f in folders:
        tar.add(f)
Python

深掘りポイント

  • TAR は「複数フォルダをまとめる」のが得意
  • ZIP より柔軟で、サーバー運用でよく使われる

pathlib を使った読みやすい TAR 圧縮

Path オブジェクトで直感的に書ける

from pathlib import Path
import tarfile

folder = Path("data")
tar_name = "data.tar.gz"

with tarfile.open(tar_name, "w:gz") as tar:
    tar.add(folder, arcname=folder.name)
Python

メリット

  • パス操作が読みやすく、ミスが減る
  • arcname を使うと TAR 内のフォルダ名を自由に変更できる

TAR圧縮を業務で使うときの重要ポイント

  • TAR は「まとめる」+「圧縮方式を選ぶ」構造
  • gzip(w:gz)は最もバランスが良く、業務で最も使われる
  • bzip2(w:bz2)・xz(w:xz)は圧縮率重視
  • フォルダ丸ごと圧縮は add() だけで簡単
  • 圧縮後の削除や世代管理と組み合わせると自動化が強力になる

TAR は ZIP より柔軟で、特にサーバー運用やバックアップで強力な武器になります。

タイトルとURLをコピーしました