はじめに
ファイルの圧縮や解凍処理は日頃の業務でもよく使うかと思いますが、Pythonのプログラムで実現させるにはモジュールのtarfileをインポートします。
Windowsユーザの方はあまりtarでファイルを圧縮したり、tar.gzなどの圧縮ファイルを解凍する機会は少ないかと思いますが、Linuxユーザにとっては普段からよく行う作業です。
tarファイルやzipファイルの圧縮、解凍処理を覚えておけばとりあえずプログラムを書いていても困らないかなと思いましたので、自分の失念防止用としても記載します。
ファイルを圧縮する
ファイルを圧縮してtarファイルにするには、モジュールのtarfileをインポートします。
ファイルを圧縮するサンプルコードは以下になります。
import tarfile
# 圧縮
with tarfile.open('sample.tar.gz', 'w:gz') as t:
t.add('sample_dir')
プログラムを実行すると「sample.tar.gz」という圧縮されたtarファイルが作成されたかと思います。
因みに圧縮対象の「sample_dir」の中身は以下になります。
import glob
# sample_dirの中身を確認(再帰的処理)
files = glob.glob('./sample_dir/**', recursive=True)
for file in files:
print(file)
# 出力結果
./sample_dir\
./sample_dir\plaintext.txt
./sample_dir\sample01.csv
./sample_dir\sample02.csv
./sample_dir\sample03.csv
./sample_dir\test01.txt
./sample_dir\test02.txt
ファイルを解凍する
sample.tar.gzなどのtarファイルを解凍するには、モジュールのtarfileをインポートします。
ファイルを解凍するサンプルコードは以下になります。
import tarfile
# 解凍
with tarfile.open('sample.tar.gz', 'r:gz') as t:
t.extractall(path='sample_pg')
プログラムを実行すると「sample_pg」というディレクトリが作成され、その中に解凍したディレクトリやファイル群が保存されます。
# sample_pgの中身を確認(再帰的処理)
import glob
files = glob.glob('./sample_pg/**', recursive=True)
for file in files:
print(file)
# 出力結果
./sample_pg\
./sample_pg\sample_dir
./sample_pg\sample_dir\plaintext.txt
./sample_pg\sample_dir\sample01.csv
./sample_pg\sample_dir\sample02.csv
./sample_pg\sample_dir\sample03.csv
./sample_pg\sample_dir\test01.txt
./sample_pg\sample_dir\test02.txt
まとめ
CentOSなどのLinuxサーバを普段から触っている方は、バックアップを取るときにtarコマンドを使ってファイルを圧縮することが多いと思います。
また、逆にバックアップとして保存していたtar.gzなどを解凍することも勿論あり、Pythonプログラムでも同じように処理できれば非常に便利だと思います。
なにかしらPythonプログラムでもファイルの圧縮や解凍をする機会は多いかと思いますので、ご参考になれば幸いです。
コメント