テクノロジー · 実用ガイド

Python の「field larger than field limit」?上限変更前に CSV record を診断する

raw bytes を保存し、Sniffer と reader を分離して、正当な幅、quote 崩壊、検出だけの失敗を判定してから field_size_limit を変更します。

CSV bytes から bounded acceptance までのオリジナルイラスト。
オリジナルイラスト:limit 変更前に error を証拠として扱います。 Watch at Ease

_csv.Error は原因ではなく境界です。大きな正当 field、閉じない quote による record 結合、Sniffer sample の失敗で同じ表示になります。

bytes と parser contract を保存し、最初の logical record を特定し、最小の修正後に意味と memory の両方を検証します。

1. bytes と parser contract を保存

hash、size、encoding、BOM、engine を記録し、変換前の file を newline="" で開きます。

dialect 設定と現在の limit を保存し、test 後に戻します。

2. reader と Sniffer を分けて再現

既知 dialect がある場合は Sniffer を避け、同じ bytes を明示設定で読みます。

明示 reader が成功した場合だけ Sniffer-only と判断します。

3. 最初の logical record を特定

fresh handle で stream し、reader.line_num と候補周辺の限定 byte offset を残します。

physical line と CSV record は別なので、quote closure と column drift を確認します。

4. width、quote collapse、検出境界を分類

正当な wide field は framing と構造が安定し、producer contract と測定値が一致します。根拠ある有限 cap だけ設定します。

quote が閉じなければ source を修正・拒否し、Sniffer-only なら既知 dialect を使います。

5. platform bound と修正を検証

C long 変換が overflow する場合は値を下げ、sys.maxsize を普遍的設定にしません。

row・column・hash・embedded character・memory・limit restore を確認します。

wide field、quote collapse、Sniffer-only のオリジナルイラスト。
オリジナルイラスト:同じ例外でも証拠で修正を分けます。 Watch at Ease