非常に大きなフィールドを持つ 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.maxsize
Python 2.xと3.xで動作します。Python sys.maxint
2.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)