_csv.Error: フィールドがフィールド制限を超えています (131072) 質問する

_csv.Error: フィールドがフィールド制限を超えています (131072) 質問する

非常に大きなフィールドを持つ 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 ファイルをどのように分析すればよいですか? 後続のステップでデータを分析する必要があるため、巨大なフィールドを持つ行をスキップすることはできません。

ベストアンサー1

csv ファイルには、非常に大きなフィールドが含まれている可能性があります。そのため、次の値を増やしてくださいfield_size_limit:

import sys
import csv

csv.field_size_limit(sys.maxsize)

sys.maxsizePython 2.xと3.xで動作します。Python sys.maxint2.xでのみ動作します(SO: Python 3 の sys-maxint とは何か

アップデート

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)

おすすめ記事