在Python中,CSV文件的行数错误

16 浏览
0 Comments

在Python中,CSV文件的行数错误

我正在处理一个csv文件,在此之前,我使用以下代码获取行数。\n

total_rows=sum(1 for row in open(csv_file,"r",encoding="utf-8"))

\n这段代码是根据这个链接中的帮助编写的。\n然而,total_rows与csv文件中的实际行数不匹配。我已经找到了另一种方法来解决这个问题,但我想知道为什么这个方法不能正确地工作??\n

\n在CSV文件中,有些单元格包含大量的文本,我必须使用编码来避免读取csv文件时出错。\n

\n非常感谢任何帮助!

0
0 Comments

在Python中CSV文件的错误行数计算问题

在Python中读取CSV文件时,有时会出现错误的行数计算问题。这个问题的根源在于我们不是在计算行数,而是计算换行符的数量(无论是Windows中的\r\n还是Linux中的\n)。问题出现在当一个单元格中有换行符的文本时,例如:

1, "我的巨大文本\n有很多行\n"

2, "其他文本"

使用以下方法,针对上述数据,我们将会得到4行,但实际上只有2行。

解决这个问题的方法是使用Pandas或其他库来读取CSV文件。示例如下:

import pandas as pd

data = pd.read_csv(pathToCsv, sep=',', header=None)

number_of_rows = len(df.index) # 或者使用 df[0].count()

需要注意的是,len(df.index)和df[0].count()是不可互换的,因为count()函数会排除NaN值。

虽然没有使用Pandas,我成功地得到了正确的行数,但你是在建议open函数也会计算每个单元格中的行数吗?

是的,因为open函数只是读取文件,并没有考虑到这是一个CSV文件。

Chris总结了你的观点,非常感谢你的回答。

0
0 Comments

问题的原因是,当使用某些csv解析器(如pandas.read_csv)读取包含多行文本的单元格的csv文件时,会导致行数计算错误。这是因为解析器会将包含换行符的文本块视为单独的行。

解决这个问题的方法是在读取csv文件时,使用csv模块的reader函数,并设置delimiter参数为逗号。然后将读取的数据转换为列表,并计算列表的长度(排除标题行),即可得到正确的行数。

以下是解决方法的代码示例:

import csv
with open(csv_file, "r", encoding="utf-8") as f:
    reader = csv.reader(f, delimiter=",")
    data = list(reader)
    row_count = len(data)

使用以上代码,可以正确地获取csv文件中的行数,不会受到多行文本单元格的影响。

总结起来,当使用某些csv解析器读取包含多行文本的单元格的csv文件时,可能会导致行数计算错误。解决方法是使用csv模块的reader函数,并设置delimiter参数为逗号,然后将读取的数据转换为列表,并计算列表的长度。这样可以获取到正确的行数。

0