最近人からデータをもらったとき、.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_csv
はgzip圧縮されたファイルを直接読めます。(引数なしで)