1. ホーム
  2. python

[解決済み】_csv.Error: field larger than field limit (131072)

2022-01-26 15:09:39

質問

非常に大きなフィールドを持つcsvファイルを読み込むスクリプトがあります。

# example from http://docs.python.org/3.3/library/csv.html?highlight=csv%20dictreader#examples
import csv
with open('some.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

しかし、これでは一部のcsvファイルで以下のようなエラーが発生します。

_csv.Error: field larger than field limit (131072)

巨大なフィールドを持つcsvファイルを解析するにはどうしたらよいですか?巨大なフィールドを持つ行をスキップすることは、その後のステップでデータを分析する必要があるため、オプションではありません。

どのように解決するのですか?

csvファイルには非常に巨大なフィールドが含まれている可能性があります。 field_size_limit :

import sys
import csv

csv.field_size_limit(sys.maxsize)

sys.maxsize は、Python 2.x と 3.x で動作します。 sys.maxint の場合、Python 2.x でのみ動作します ( SO: what-is-sys-maxint-in-python-3 )

更新情報

Geoffが指摘したように、上記のコードでは以下のようなエラーが発生する可能性があります。 OverflowError: Python int too large to convert to C long . これを回避するためには、次のようにします。 クイックアンドダーティ のコード (Python 2 と Python 3 のあるすべてのシステムで動作するはずです) があります。

import sys
import csv
maxInt = sys.maxsize

while True:
    # decrease the maxInt value by factor 10 
    # as long as the OverflowError occurs.

    try:
        csv.field_size_limit(maxInt)
        break
    except OverflowError:
        maxInt = int(maxInt/10)