どうも太田アベル(@LandscapeSketch)です。
ビックデータ分析とかDBの移植とか、データの移動時に必ず登場する「CSV」。
中身は単なるテキストで、行ごとにコンマで区切ってある、あのファイルですね。タブで区切ってあればTSVになります。他にもセミコロンやパイプで区切ってあるファイルも存在するようですね。
CSVはたいていちょっとしたデータをまとめたものですが、ビックデータの分析用とか過去のDBの移植になると数百MB、さらには数GBというとんでもないCSVファイルができあがることもしばしばあります。
ちなみに、100MBのCSVをエクセルで開こうとすると、だいたい10秒ぐらいかかります。
高速動作で有名な、フリーのCSVエディタ「SmoothCSV」でも、2~3秒。
さらに、500MBのCSVをエクセルで開こうとすると、「ファイル全体を読み込むことができませんでした」という虚しいメッセージが表示されます。
SmoothCSVでは10秒ほどで表示可能でした。
(テストマシンはCore i7-9700、メモリ32GBです)
でもそんなCSVが1つならまだしも、30個とかあったらどうします?開いてチェックするだけでもかなりの時間のロスです。
他の方法としては
- ファイルを分割して編集し、結合する
- SQLiteなどにインポートして編集し、再度エクスポートする
- Accessに入れて編集し、エクスポートする
- sedやGrepを駆使してなんとか探す
こんなところがありますが、どれも一手間も二手間もかかって面倒な上に、時間がかかります。
また、DBにいきなり投入しようとした場合、文字化けとか文字数オーバーとか項目エラーとか、いろいろ発生して作業開始するまでにえらい苦労することも。
そこで!僕がメインでCSVをいじるのは、EmEditor(エムエディタ)。
「テキストエディタでしょ?CSV編集なんてカラムが無いから見づらいし、まちがってコンマを削ってズレるし、苦労は同じだろ」と指摘したくなるところでしょうが、これを見てください。
テキストエディタだけど、
カラム形式で表示できます!
あと、これ1.66GB、3300万行のという巨大すぎるCSVなんですが、エクセルでは読み込み不能。SmoothCSVでは開こうとがんばってくれますが、CPUが全コア100%に張り付き、3分以上たっても開きませんでした。(途中で強制終了しました)
しかし、EmEditorなら1秒で開きます。
EmEditorなら1秒で開きます。
重要なので2回書きました。これは比喩ではありません。遅くても2秒で開きます。
その驚くべきCSV編集能力を、ご紹介します!
EmEditorを入手
まずEmEditorを公式サイトからダウンロード。無料体験版も、フリー版もあります。
フル機能版は有料ソフト(年間 4,800円もしくは永久 21,600円)ですが、30日間は無料で全機能が使えます。CSV編集機能は有料版のみとなりますのでご注意ください。
試用中はときどき「登録してね」というウィンドウが出ますが、そんなにうるさくないです。
基本的にはテキストエディタ
EmEditorを開くと、上に多数のツールが並ぶ、ちょっと懐かしい感じのエディタが開きます。VS Code何かと比べると、クラシカルな雰囲気。具体的にはOffice 2010な感じ。
各種プログラムコードの色付けもしてくれます。
ミニマップやアウトライン、日本語の全角/半角変換、ソートやマクロなど、高機能エディタに求められる機能はほとんどを網羅。機能ごとにツールを切り替える必要がほとんどありません。
そして目玉(?)は最強のCSV編集機能。
まず冒頭に書いたとおり、どんな巨大なCSVでも、平気で開きます。しかも100MBだろうが1GBだろうが、1秒か2秒で開きます。
そしてエクセルのような表計算ソフトのように、カラム表示に!
セル一つごとの処理や、連番などのフィル、列ごとの移動/削除/挿入など、表計算ソフトの基本的な動きを装備しています。
こちらは表計算モードのサブメニュー。どんな事ができるか一覧できます。
開発者向けを意識しているからか、IPv4やIPv6でのソートがあるのが珍しい。複数列を参照してのソートも装備。
CSVの変換や操作も充実
CSVは、ダブルクォーテーションの付加や除去、他のCSV形式(タブ区切り、パイプ区切りなど)に変換することも可能。もちろん文字コードの変換もあたりまえにできます。
連番を作成するフィル機能も搭載。
最初の行に1、次の行に2を書き、選択カーソルの右下をひっぱると、さっと連番が作成されました!エクセルでおなじみの機能ですが、テキストエディタで搭載しているのはほぼありません。
セルを選択してのコピー、カラムまるごとのコピーも可能。ここまで来ると、もはやテキストエディタではないような感じですね。
思わす関数や計算式を埋め込みたくなりますが、さすがにそこまではムリです。
3000万行をソート可能!
CSVも文字もソートできます。さらにCSVならカラムごとのソートも可能。
冒頭の1.66GB、3000万行のファイルを日付でソートした場合、Core i7-9700で約48秒でした。
さすがに時間はかかりますが、これほどの行数を待っているだけでソートできるんですから、十分な機能でしょう。10万行ぐらいなら1、2秒です。
ただし、巨大ファイルをソートした場合はファイル保存時にも時間がかかりますが、これも待っていればOKなので、よしとしましょう。
(3300万行でおよそ6分かかりました。たぶん保存時に実データを動かしているのでしょう。この場合、一時的にディスクをかなり消費するので注意したいところ。ソートをしなければ3秒ほどで保存できました。)
EmEditor以外のテキストエディタは、基本的に1行単位で扱うので、特定カラムのソートということが、まずできません。ソートすると行頭の文字でソートしてしまいます。
エクセルでやろうとすると、まず読み込めないので200個ぐらいに分割して、それぞれでソートするしかありません。が、ファイルをまたいでのソートはできないので、結局ムリということです。
他には、AccessとかSQLiteのようなデータベースに入れてみるしかありません。
テキストでいじればすぐ終わるところを、わざわざデータベースへインポート、エクスポートをしないといけない、というのはかなり時間のロスと言えるでしょう。
ブックマーク機能で抽出!
CSVの編集時は、特定の行を行ったり来たりすることがあります。これもなかなかめんどう。
EmEditorにはブックマーク機能があり、テキストだけではなくてCSVにも使えます。
しかもただジャンプするだけの機能ではありません。
ブックマークされた行だけを切り取り/コピーしたり、同時選択状態(同時編集状態)にすることもできます!
目で見て別ファイルに行を抽出する作業を考えてみましょう。
通常のエディタは
- 検索
- 選択
- コピー
- 別ファイルにペースト
と繰り返す作業です。非常に面倒ですよね。
EmEditorなら
- 検索
- Ctrl + F2でブックマークしまくる
そして全てをブックマークしたら、「ブックマークされた行を抽出して新規作成」を選べば、サクっと選択項目だけのファイルに!!
ヤバいほど便利。
プロのデータ処理に必携
EmEditorは「テキストファイル万能ツール」として、僕は10年近く愛用しています。
特にプログラム開発の末期となるデータ移行、データベース変換などで、EmEditorはかなり活躍します。どんなに巨大であっても気にせず開くことができ、日本語を含め、文字コードの処理も正確です。
EmEditor前は、秀丸やLinuxのsedやgrepをこねくり回して編集していましたが、EmEditorを手に入れてからはまったく必要なくなりました。なんでも開いてザクザク編集できます。
DB投入前のゴミ取り、正規化がとにかく早い。文字化け、エンコード違いによるインポートエラーなど、あらゆる状況に即座に対応できるので、非常に心強い。
手直しをしながらインポートするときなど、時間をかなり短縮できます。
WTS的まとめ
EmEditorは動作がかなり早いのもいいところです。起動は1、2秒、巨大なファイル内のジャンプも一瞬です。
雑処理をこなすためのエディタとして、最高峰といえます。
あ、もちろんプログラミングや普通の文書作成でもOKですよ!
コメント