【Python】巨大なファイル(ログ・csv等)を分割して圧縮する

【Python】巨大なファイル(ログ・csv等)を分割して圧縮する

やりたいこと

間違ってor仕方なく巨大なデータが存在する場合ってありますよね。
渡しの場合は巨大な過去のデータ(数十GB)をWebAPI経由で取得していたのですが、本来は日付単位でファイルを分割しようとしていたのに、スクリプトを間違えて全部同じファイルに出力してしまっていました。

そこで困ったのが、ディスク容量がやばいので圧縮しようとしたところ、巨大なファイルを圧縮しようとしているせいで、PCの空き容量が足りないと怒られる…
ファイルを分割して圧縮したかったけど、ちょうどいいコマンドもなさそうでした。
(分割してもよかったけど、全て分割することは毎回行数指定とかしなければ行けないので面倒で嫌だった。)

でも大丈夫。便利な道具がいっぱいある。

Pandasで解決してしまおう

csvの読み込みも高速らしいpandasで解決しました。

ポイントは
・read_csvの引数にchunksizeを指定し、返り値をループで回すこと。
(ループさせて初めてDataFrameを取り出せます。)
・to_csvの引数にcompression=’gz’を指定して、gzip圧縮を行うこと。

注意

そもそもpandasがcsvのようなデータを読み込むことを前提としているため、全てのファイルでうまくいくことは保証できません。
カンマがよく使われているようなデータではうまくいかない(or工夫が必要)になると思われます。

参考にしたページ

http://sinhrks.hatenablog.com/entry/2014/11/21/231534

https://datumstudio.jp/blog/pandas%E3%81%A7csv%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E6%9B%B8%E3%81%8D

Pyhonカテゴリの最新記事