सीएसवी क्षेत्र के आकार को [अजगर 3. डॉक्स] के माध्यम से नियंत्रित किया जाता है : सीएसवी। field_size_limit ( [new_limit] ) :
पार्सर द्वारा अनुमत वर्तमान अधिकतम फ़ील्ड आकार देता है। यदि new_limit दिया जाता है, तो यह नई सीमा बन जाती है।
यह डिफ़ॉल्ट रूप से करने के लिए सेट कर दिया जाता 128k या 0x20000 ( 131,072 ), किसी भी सभ्य के लिए पर्याप्त होना चाहिए जो .csv :
>>> import csv
>>>
>>> limit0 = csv.field_size_limit()
>>> limit0
131072
>>> "0x{0:016X}".format(limit0)
'0x0000000000020000'
हालाँकि, .csv फ़ाइल ( सही उद्धरण और सीमांकक के साथ ) के साथ काम करते समय, इस आकार की तुलना में कम से कम एक फ़ील्ड होने पर, त्रुटि पॉप अप हो जाती है।
त्रुटि से छुटकारा पाने के लिए, आकार सीमा को बढ़ाया जाना चाहिए (किसी भी चिंता से बचने के लिए, अधिकतम संभव मूल्य का प्रयास किया जाता है)।
दृश्यों के पीछे (जांच [गीथहब]: अजगर / cpython - (मास्टर) cpython / मॉड्यूल / _csv.c कार्यान्वयन विवरण के लिए), यह मान रखने वाला चर एक C लंबा ( [विकिपीडिया: C डेटा प्रकार ) है, जिसका आकार CPU आर्किटेक्चर और OS ( I L P ) पर निर्भर करता है । शास्त्रीय अंतर: 64 बिट ओएस ( पायथन बिल्ड) के लिए, लंबे प्रकार का आकार ( बिट्स में ) है:
इसे सेट करने का प्रयास करते समय, नए मान को लंबी सीमाओं में जांचा जाता है , इसीलिए कुछ मामलों में एक और अपवाद पॉप अप होता है (यह मामला विन पर आम है ):
>>> 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 ) सेट करें ( धन्यवाद [पायथन 3. डॉक्स]: ctypes - पायथन के लिए एक विदेशी फ़ंक्शन लाइब्रेरी )। यह किसी भी 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 बिट पायथन :
>>> 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 बिट अजगर , चीजों को वर्दी हैं: यह व्यवहार पर का सामना करना पड़ा है जीत ।
अधिक जानकारी के लिए निम्नलिखित संसाधनों की जाँच करें: