csv 필드 크기는 [Python 3.Docs] : csv 를 통해 제어됩니다 . field_size_limit ( [new_limit] ) :
파서가 허용하는 현재 최대 필드 크기를 반환합니다. 경우 new_limit이 주어집니다,이 새로운 제한됩니다.
기본적으로 128k 또는 0x20000 ( 131072 ) 으로 설정되며 적절한 .csv에 충분합니다 .
>>> import csv
>>>
>>> limit0 = csv.field_size_limit()
>>> limit0
131072
>>> "0x{0:016X}".format(limit0)
'0x0000000000020000'
그러나이 크기보다 적어도 하나의 필드가 더 긴 .csv 파일 ( 올바른 인용 부호 및 구분 기호 포함 )을 처리하면 오류가 나타납니다.
오류를 제거하려면 크기 제한을 늘려야합니다 (걱정을 피하기 위해 가능한 최대 값이 시도됩니다).
장면 뒤에 ( [GitHub] : python / cpython-(마스터) cpython / Modules / _csv.c 구현 세부 사항 확인)이 값을 보유하는 변수는 C long ( [Wikipedia] : C data types )이며 크기는 CPU 아키텍처 및 OS ( I L P ) 에 따라 다릅니다 . 고전적인 차이점 : 64 비트 OS ( Python 빌드)의 경우 긴 유형 크기 ( 비트 )는 다음과 같습니다.
설정하려고 할 때 새로운 값이 긴 경계 에 있는지 확인하기 때문에 경우에 따라 다른 예외가 나타나는 경우가 있습니다 (이 경우는 Win에서 일반적 임).
>>> import sys
>>>
>>> sys.platform, sys.maxsize
('win32', 9223372036854775807)
>>>
>>> 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 3.Docs] : ctypes-Python의 외부 함수 라이브러리 덕분에 ). 모든 CPU / OS 에서 Python 3 및 Python 2 에서 작동해야합니다 .
>>> import ctypes as ct
>>>
>>> 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'
64 비트 파이썬 A의 닉스 와 같은 OS :
>>> import sys, csv, ctypes as ct
>>>
>>> sys.platform, sys.maxsize
('linux', 9223372036854775807)
>>>
>>> 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'
들어 32 비트 파이썬 상황이 균일 : 그것은에 발생하는 동작입니다 승리 .
자세한 내용은 다음 리소스를 확인하십시오.