どうも太田アベル(@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を公式サイトからダウンロード。無料体験版も、フリー版もあります。(※ただしフリー版は、当記事の話題である”CSV編集機能”がありません。ご注意ください)
フル機能版は有料ソフトですが、30日間は無料で全機能が使えます。CSV編集機能は有料版のみとなりますのでご注意ください。(公式サイトでは、年間サブスクリプション 6,160円、2年目以降半額。もしくは永久買い切りライセンス 40,040円)
試用中はときどき「登録してね」というウィンドウが出ますが、そんなにうるさくはありません。
基本的にはテキストエディタ
EmEditorを開くと、上に多数のツールが並ぶ、ちょっと懐かしい感じの画面が開きます。VS Codeなんかと比べると、クラシカルな雰囲気。具体的にはOffice 2010な感じ。
各種プログラムコードの色付けもしてくれます。
ミニマップやアウトライン、日本語の全角/半角変換、ソートやマクロなど、高機能エディタに求められる機能はほとんどを網羅。機能ごとにツールを切り替える必要がほとんどありません。
そして目玉(?)は、他に類を見ない最強のCSV編集機能。
まず冒頭に書いたとおり、どんな巨大なCSVでも、平気で開きます。しかも100MBだろうが1GBだろうが、1秒か2秒で開きます。
そしてエクセルのような表計算ソフトのように、カラム表示にできます!
- セル一つごとの処理
- 連番フィル
- 列ごとの移動/削除/挿入
など、表計算ソフトの基本的な動きを装備しています。
こちらはCSVモードのサブメニュー。どんな事ができるか一覧できます。
開発者向けを意識しているからか、IPv4やIPv6でのソートがあるのが珍しい。複数列を参照してのソートも装備。
CSVの変換や操作も充実
CSVは、ダブルクォーテーションの付加や除去、他のCSV形式(タブ区切り、パイプ区切りなど)に変換することも可能。
もちろんプログラマも使うエディタなので、あらゆる文字コードへの変換もあたりまえに、かつ正確にできます。
日本語は、SJIS(932)、EUC(51932)、JIS iso-2022-jp(50220)、JIS 1バイトカタカナ(50221)、JIS 1バイトカタカナ SO/SI(50222)、UTF-8、UTF-16が使えます。(UTFはエンディアン、BOM有無も指定可能)
サロゲートペアなども問題なく対応しています。
古~いDBからJISで半角カナが嵐のように使われているデータが2GBほど出てきて、それを正規化して新DBにUTF-8でインポートしてくれ、という要望が来たらどうします?
エクセルでやる場合、ほかにいくつのツールが必要になるでしょうか?軽い地獄が待っているのが、容易に推測できます。
EmEditorなら開いてそのまま編集、UTF-8で保存するだけですね。再編集も安心。半角カナが悪夢のように文字化けすることはありません。さらに半角カナのみを全角にするのも朝飯前!
連番を作成するフィル機能も搭載。
最初の行に1、次の行に2を書き、選択カーソルの右下をひっぱると、さっと連番が作成されました!エクセルでおなじみの機能ですが、テキストエディタで搭載しているのはほぼありません。
セルを選択してのコピー、カラムまるごとのコピーも可能。ここまで来ると、もはやテキストエディタではないような感じですね。
思わず関数や計算式を埋め込みたくなりますが、さすがにそこまではムリです。
3000万行をソート可能!
CSVも、文字列もソートできます。さらにCSVならカラムごとのソートも可能。
冒頭の1.66GB、3000万行のファイルを日付でソートした場合、Core i7-9700で約48秒でした。
さすがに時間はかかりますが、これほどの行数を待っているだけでソートできるんですから、十分な機能でしょう。10万行程度なら1、2秒です。
ただし、巨大ファイルをソートした場合はファイル保存時にも時間がかかりますが、これも待っていればOKなので、よしとしましょう。
(3300万行でおよそ6分かかりました。たぶん保存時に実データを動かしているのでしょう。この場合、一時的にディスクをかなり消費するので注意したいところ。ソートをしなければ3秒ほどで保存できました。)
EmEditor以外のテキストエディタは、基本的に1行単位で扱うので、特定カラムのソートということが、まずできません。ソートすると行頭の文字でソートしてしまいます。
またエクセルでやろうとするとまず読み込めないので、ちょいと200個ぐらいに分割して、それぞれでソートするしかありません。が、ファイルをまたいでのソートはできないので、結局ムリということです。
他には、AccessとかSQLiteのようなデータベースに入れてみるしかありません。
テキストでいじればすぐ終わるところを、わざわざデータベースへインポート&エクスポートをしないといけない、というのはかなり時間のロスと言えるでしょう。文字コードが違う場合、DBの出し入れで値が化けてしまう可能性も無視できません。(会計データで数字の丸めが変わったら・・・おお恐ろしい!!)
ブックマーク機能で抽出!
CSVの編集時は、特定の行を行ったり来たりすることがあります。これもなかなかめんどう。
EmEditorにはブックマーク機能があり、テキストだけではなくてCSVにも使えます。しかもただジャンプするだけの機能ではありません。
ブックマークされた行だけを切り取り/コピーしたり、同時選択状態(同時編集状態)にすることもできます!
目で見て別ファイルに行を抽出する作業を考えてみましょう。
通常のエディタは
- 検索
- 選択
- コピー
- 別ファイルにペースト
と繰り返す作業です。非常に面倒ですよね。
EmEditorなら
- 検索
- Ctrl + F2でブックマークしまくる
そして全てをブックマークしたら、「ブックマークされた行を抽出して新規作成」を選べば、サクっと選択項目だけのファイルに!!
ヤバいほど便利。
プロのデータ処理に必携
EmEditorは「テキストファイル万能ツール」として、僕は10年近く愛用しています。特にプログラム開発の末期となるデータ移行、データベース変換などで、EmEditorはかなり活躍します。どんなに巨大であっても気にせず開くことができ、日本語を含め、文字コードの処理も正確です。
EmEditor前は、秀丸やLinuxのsedやgrepをこねくり回して編集していましたが、EmEditorを手に入れてからはまったく必要なくなりました。なんでも開いてザクザク編集できます。EmEditorから別のソフトを行き来することもないので、集中して作業ができるのもうれしい。
DB投入前のゴミ取り、正規化がとにかく早い。文字化け、エンコード違いによるインポートエラーなど、あらゆる状況に即座に対応できるので、非常に心強い。
手直しをしながらインポートするときなど、時間をかなり短縮できます。
テキストエディタ界のサバイバルナイフ、と言えるかもしれません。
WTS的まとめ
EmEditorは動作がかなり早いのもいいところです。起動は1、2秒、巨大なファイル内のジャンプも一瞬です。雑処理をこなすためのエディタとして、最高峰といえます。
あ、もちろんプログラミングや普通の文書作成でもOKですよ!
コメント