← あませの棚

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実測を見る →