我有一个脚本在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文件?跳过具有大字段的行是不可取的,因为数据需要在后续步骤中进行分析。


当前回答

找到通常放在.cassandra目录下的cqlshrc文件。

在那个文件中追加,

[csv]
field_size_limit = 1000000000

其他回答

我刚刚在一个“普通”CSV文件上发生了这种情况。有些人可能称其为无效格式化文件。没有转义字符,没有双引号,分隔符是分号。

该文件的示例行如下所示:

第一个细胞;第二个“Cell”带有双引号和前导 “部分引用”单元格;最后一个单元格

第二个单元格中的单引号会使解析器偏离轨道。奏效的方法是:

csv.reader(inputfile, delimiter=';', doublequote='False', quotechar='', quoting=csv.QUOTE_NONE)

这可能是因为您的CSV文件嵌入了单引号或双引号。如果您的CSV文件是制表符分隔的,请尝试以以下方式打开:

c = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)

您可以使用pd的error_bad_lines选项。Read_csv来跳过这些行。

import pandas as pd

data_df = pd.read_csv('data.csv', error_bad_lines=False)

这是有效的,因为在pandas中定义的“坏行”包括其中一个字段超过csv限制的行。

注意,这个解决方案只在csv文件中的字段不应该这么长时才有效。 如果您希望有大的字段大小,这将丢弃您的数据。

下面是检查当前的限制

csv.field_size_limit()

出[20]:131072

下面是增加限制。将其添加到代码中

csv.field_size_limit(100000000)

试着再检查一下极限

csv.field_size_limit()

出[22]:100000000

现在您将不会得到错误“_csv”。错误:字段大于字段限制(131072)"

找到通常放在.cassandra目录下的cqlshrc文件。

在那个文件中追加,

[csv]
field_size_limit = 1000000000