python中CSV文件的行计数错误

时间:2019-03-15 08:09:10

标签: python csv

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

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

已在此link中提供的帮助下编写了代码。 但是,total_rows与csv文件中的实际行数不匹配。我找到了替代方法,但是想知道为什么这不能正常工作?

  

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

假设您有一个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

opensum也是如此:

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包含1行,我相信这是您所期望的。 这是因为colB的第一个单元格(又称​​巨大的文本块)现在可以用引号将整个文本括起来了。

答案 1 :(得分:1)

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

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

您的上述数据方法很可能仅在4行时返回2

尝试使用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排除了NaN。