いろいろあってCSVで出力されたデータを加工するスクリプトを書く必要に迫られました。
恥ずかしながらその過程で初めて知ったのですが、CSVって、改行コードが含まれていても規約通りなのです。
Windowsのメモ帳で、以下のようなCSVファイルを作ってみましょう。
Column1,Column2
11111,"ABC
DEF"
UTF-8(BOM付き)で保存しておくと、間違いなくExcelで読み出すことができます。
これをExcelで読み出すと、こう見えます。
””に囲まれた改行が、セル内の改行として解釈されています。
| Column1 | Column2 |
| 11111 | ABC DEF |
CSVファイルの規約では、特殊文字は、以下の三文字です。
| ダブルクォート | " |
| カンマ | , |
| 改行コード | 目には見えない |
これらの文字がカラムにいるときは、ダブルクォートで囲み、ダブルクォートはダブルクォートでエスケープする、というのがルールです。
CSVファイルを加工するスクリプトを作成していて、元データに1行中に改行が含まれるデータが含まれていて、「ちゃんと規約通りに出力してほしいなあ」と思っていたのですが、実際には、ちゃんと規約通りに出力されていたのでした。
CSVで連携するログ解析ツールなどでも、1行中に改行が複数入ることを許容していなかったりするものがあります。
自分が過去書いたコードも、結構その前提でCSVファイルって、解釈しておりました。
同様な誤解をしている人は筆者以外にもいると思いますので、恥を忍んでこういう記事を書いてみました。
PowerShellのImport-Csvコマンドレットは、きちんとこういうものも解釈してくれますし、Pythonのライブラリなんかも、きちんと処理されます。
まだまだCSVファイルは使われていくと思いますし、途中の改行を許容しない処理系も今後も存続していくでしょう。
動作仕様に合わせて、臨機応変に対応してまいります。

