_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文件可能包含非常大的字段,因此增加field_size_limit
:
import sys import csv csv.field_size_limit(sys.maxsize)
sys.maxsize
适用于Python 2.x和3.x. sys.maxint
只能用于Python 2.x( SO:what-is-sys-maxint-in-python-3 )
更新
正如Geoff指出的那样,上面的代码可能会导致以下错误: OverflowError: Python int too large to convert to C long
。 为了规避这一点,你可以使用下面的快速和脏的代码:
import sys import csv maxInt = sys.maxsize decrement = True while decrement: # decrease the maxInt value by factor 10 # as long as the OverflowError occurs. decrement = False try: csv.field_size_limit(maxInt) except OverflowError: maxInt = int(maxInt/10) decrement = True
这可能是因为您的CSV文件已embedded单引号或双引号。 如果您的CSV文件是制表符分隔,请尝试打开它:
c = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
对于Python 3.4,我发现这个代码,它适用于我:
csv.field_size_limit(500 * 1024 * 1024)
有时候,一行包含双引号列。 当csv阅读器尝试阅读这一行时,不理解列的尾部并且引发这个提升。 解决scheme如下:
reader = csv.reader(cf, quoting=csv.QUOTE_MINIMAL)