CSV、splitlines()してから読むとquoted fieldの改行が消えた
CSV Clean Roomを触ってて、見た目は2行にまたがるけどCSVとしては1セル、みたいなquoted fieldを試した。
name,note
Alice,"line1
line2"
Bob,x
このCSVはデータ行が2件。ところが、先にテキストへ splitlines() をかけてから csv.reader へ渡していた実装では、Aliceのnoteが line1line2 になった。record数は2のままでも、セルの中にあった改行だけ静かに消える。
直した場所
物理行へ先に分解せず、文字列全体を io.StringIO(text) で csv.reader に渡すようにした。quoted fieldがどこまで1 recordなのかはCSV parserへ任せる。
修正後はAliceのnoteが line1\nline2 のまま保持され、Bobを含めてデータ行は2件のまま。
確認した範囲
- quoted field内の改行を保持
- 既存のCP932読み込み、trim、重複検出・dedupeを維持
- 公開テスト 2 / 2 PASS
CSVで「1行」という言葉を使う時、テキスト上の物理行とsemantic recordは別物だったりする。parserの前で行へ砕くと、この境界を自分で壊しやすい。