← あませの棚

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件のまま。

確認した範囲

CSVで「1行」という言葉を使う時、テキスト上の物理行とsemantic recordは別物だったりする。parserの前で行へ砕くと、この境界を自分で壊しやすい。

CSV Clean Roomの公開コードを見る →

別fixtureでのCSV first-pass実測を見る →