.csvフィールドサイズは[Python.Docs]を介して制御されます:csv.field_size_limit([new_limit])(強調は私のものです):
パーサーで許可されている現在の最大フィールドサイズを返します。new_limitが指定されている場合、これが新しい制限になります。
デフォルトでは131072または0x20000(128k )に設定されています。これは、適切な.csvには十分なはずです。
>>> import csv
>>>
>>>
>>> limit0 = csv.field_size_limit()
>>> limit0
131072
>>> "0x{0:016X}".format(limit0)
'0x0000000000020000'
ただし、このサイズよりも(少なくとも)1つのフィールドが長い.csvファイル(正しい引用符と区切り文字を使用)を処理すると、エラーがポップアップ表示されます。
エラーを取り除くには、サイズ制限を増やす必要があります(心配を避けるために、可能な最大値が試行されます)。
舞台裏(実装の詳細については[GitHub]:python / cpython-(master)cpython / Modules / _csv.cを確認してください)、この値を保持する変数はC long([Wikipedia]:Cデータ型)であり、そのサイズはCPUアーキテクチャとOS(I L P )によって異なります。古典的な違い:064ビットOS(およびPythonビルド)の場合、長い型のサイズ(ビット単位)は次のとおりです。
設定しようとすると、新しい値が長い境界にあることがチェックされます。そのため、場合によっては別の例外がポップアップします(sys.maxsizeは通常064ビット幅であるため-Winで発生します)。
>>> import sys, ctypes as ct
>>>
>>>
>>> "v{:d}.{:d}.{:d}".format(*sys.version_info[:3]), sys.platform, sys.maxsize, ct.sizeof(ct.c_void_p) * 8, ct.sizeof(ct.c_long) * 8
('v3.9.9', 'win32', 9223372036854775807, 64, 32)
>>>
>>> csv.field_size_limit(sys.maxsize)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long
この問題が発生しないようにするには、アーティファクトを使用して(可能な最大)制限( LONG_MAX)を設定します([Python.Docs]のおかげで:ctypes-Python用の外部関数ライブラリ)。Python3およびPython2、任意のCPU / OSで動作するはずです。
>>> csv.field_size_limit(int(ct.c_ulong(-1).value // 2))
131072
>>> limit1 = csv.field_size_limit()
>>> limit1
2147483647
>>> "0x{0:016X}".format(limit1)
'0x000000007FFFFFFF'
OSライクなNix上の064ビットPython:
>>> import sys, csv, ctypes as ct
>>>
>>>
>>> "v{:d}.{:d}.{:d}".format(*sys.version_info[:3]), sys.platform, sys.maxsize, ct.sizeof(ct.c_void_p) * 8, ct.sizeof(ct.c_long) * 8
('v3.8.10', 'linux', 9223372036854775807, 64, 64)
>>>
>>> csv.field_size_limit()
131072
>>>
>>> csv.field_size_limit(int(ct.c_ulong(-1).value // 2))
131072
>>> limit1 = csv.field_size_limit()
>>> limit1
9223372036854775807
>>> "0x{0:016X}".format(limit1)
'0x7FFFFFFFFFFFFFFF'
032ビット Pythonの場合、問題なくスムーズに実行できるはずです(sys.maxsizeとLONG_MAXはどちらも032ビット幅であるため)。
それでもこの最大値が十分でない場合は、 Pythonから.csvを処理するために手動で介入する必要があります。
詳細については、次のリソースを確認してください。