gzipを扱いたい(gzipかtarfileを使う)

最近人からデータをもらったとき、.tar.gzできました。

こうした、gzip系の圧縮ファイルをpythonで扱う場合、
標準のgzipモジュールかtarfileモジュールが使えます。

gzの場合

gzipモジュール 単純なgzipの解凍の場合はgzipモジュールでいけます。
対象のgzipファイルをgzipでopenします。

import gzip
with gzip.open("/gz.file/path","r") as gz_file:
    from_gz = gz_file.read()

tar.gzの場合

ただし、今回はtar.gz、すなわち、tarで集めてgzで固めたものが対象でした。
その場合は、tarfileを用いることで解凍と展開をすることができます。

import tarfile

with tarfile.open("/tar.gz.file/path","r") as tar_gz_file:
    #tar.gz内の情報を出力
    gar_gz_file.list()
    #tar.gz内のファイルを対象のディレクトリに展開
    tar_gz_file.extractall("/output/dir/")


#逆の処理:tarで圧縮したい場合
write_name = 'gz後のファイル名.tar.gz'
write_target_dir = 'gzしたいディレクトリ名'

#w:の後ろに書き込み形式の指定が必要
#gz:gzip,bz2:bzip2,xz:lzma
with tarfile.open(write_name,mode='w:gz') as gzf:
    gzf.add(write_target_dir)

コマンドラインから用いる場合

また、どちらもコマンドラインからも処理できます

解凍するパターン

python -m gzip -d ファイル名

dはdecompressです。

python -m tarfile -e ファイル名

eはextractの略です。

圧縮するパターン

python -m tarfile -c 圧縮後のファイル名.tar.gz 対象ディレクトリ/

cはcreateの略です。

余談

※余談ですが、gzのファイルを直接データフレームにしたい場合、
実はpd.read_csvgzip圧縮されたファイルを直接読めます。(引数なしで)