我有一个脚本在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文件?跳过具有大字段的行是不可取的,因为数据需要在后续步骤中进行分析。
我刚刚在一个“普通”CSV文件上发生了这种情况。有些人可能称其为无效格式化文件。没有转义字符,没有双引号,分隔符是分号。
该文件的示例行如下所示:
第一个细胞;第二个“Cell”带有双引号和前导
“部分引用”单元格;最后一个单元格
第二个单元格中的单引号会使解析器偏离轨道。奏效的方法是:
csv.reader(inputfile, delimiter=';', doublequote='False', quotechar='', quoting=csv.QUOTE_NONE)
csv文件可能包含非常大的字段,因此增加field_size_limit:
import sys
import csv
csv.field_size_limit(sys.maxsize)
sys。maxsize适用于Python 2。X和3.x。sys。maxint只适用于python2。x (SO: what-is-sys-maxint-in-python-3)
更新
正如Geoff指出的那样,上面的代码可能会导致以下错误:OverflowError: Python int太大,无法转换为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)