当前位置: 首页 > 知识库问答 >
问题:

python中CSV文件的行计数错误

令狐跃
2023-03-14

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

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

代码是在这个链接中给出的帮助下编写的。但是,total_rows与csv文件中的实际行数不匹配。我已经找到了一个替代方案,但想知道为什么这是不正确的工作??

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

感谢您的帮助!

共有2个答案

云承天
2023-03-14

我认为这里的问题是因为你不是在计算行,而是在计算换行符(在windows中\r\n或者在linux中\n)。问题在于当您有一个带有文本的单元格时,其中有换行符示例:

1, "my huge text\n with many lines\n"
2, "other text"

当准确地说只有2行时,上述数据的方法将返回4

尝试使用Pandas或其他库读取CSV文件。例子:

import pandas as pd
data = pd.read_csv(pathToCsv, sep=',', header=None);
number_of_rows = len(df.index) # or df[0].count()

请注意len(df.index)和df[0]. Count()不能互换,因为Count不包括NaNs。

雷国兴
2023-03-14

假设您有一个csv文件,其中某个单元格是多行文本。

$ cat example.csv
colA,colB
1,"Hi. This is Line 1.
And this is Line2"

从外观上看,它有三行并且wc-l同意:

$ wc -l example.csv
3 example.csv

使用sum打开也是如此:

sum(1 for row in open('./example.csv',"r",encoding="utf-8"))
# 3

但是现在,如果你读的是一些csv解析器,如pandas.read_csv

import pandas as pd

df = pd.read_csv('./example.csv')
df
   colA                                    colB
0     1  Hi. This is Line 1.\nAnd this is Line2

获取正确行数的另一种替代方法如下所示:

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

除去标题,csv包含一行,我相信这是你所期望的。这是因为colB的第一个单元格(也就是巨大的文本块)现在可以通过引号包装整个文本来正确处理。

 类似资料:
  • 从2.7迁移后,我在Python 3环境中很难获得行数。几次尝试后,返回的行数为1。我如何绕过一个DeprecationWarning:'U'模式在python 3中被弃用? 在使用Python3的情况下,我尝试了以下方法,但我仍然坚持使用1。

  • 问题内容: 我可能犯了一个愚蠢的错误,但我找不到它在哪里。我想计算csv文件中的行数。我写了这个,显然没有用:我有应该是400。干杯。 问题答案: 保存列表后,如果文件指针已到达文件末尾,则您尝试读取两次文件。

  • 我可能犯了一个愚蠢的错误,但我找不到它在哪里。我想计算我的csv文件中的行数。我写了这个,显然不起作用:我有,而它应该是400。干杯。

  • 当我试图在Python中打印CSV文件的内容时,我得到了这个错误。 回溯(最近调用最后):文件“/users/cassandracampbell/library/preferences/pycharmce2018.2/scratches/player.py”,第5行,在打开('player.csv')的csvfile:filenotfounderror:[errno2]中没有这样的文件或目录:'p

  • 问题内容: 我只想删除第三行中值为‘0’的行。数据示例如下: 因此,第一行将需要删除,而第二行将保留。 到目前为止,我所拥有的如下: 任何帮助都会很棒 问题答案: 你很亲密 目前,您将整数与进行比较,然后将其与字符串进行比较。当您从文件中读取数据时,它是一个字符串而不是整数,因此这就是您的整数检查当前失败的原因: 另外,您可以使用关键字使当前代码略显pythonic,从而减少代码中的行,并且可以省

  • 我试图读取CSV文件,但它抛出了一个错误。我无法理解我的语法有什么问题,或者我是否需要向我的read_csv添加更多属性。 我试了一下这个解决办法 UnicodeDecodeError:“utf-8”编解码器无法解码位置21中的字节0x96:起始字节也无效。但它不起作用 [错误] UnicodeDecodeError回溯(最近一次调用)pandas/_libs/解析器。大熊猫中的pyx_图书馆。解