我正在处理一个csv文件,在此之前,我使用以下代码获取行数。
total_rows=sum(1 for row in open(csv_file,"r",encoding="utf-8"))
已在此link中提供的帮助下编写了代码。 但是,total_rows与csv文件中的实际行数不匹配。我找到了替代方法,但是想知道为什么这不能正常工作?
在CSV文件中,有一些带有大文本的单元格,我必须使用编码以避免读取csv文件时出错。
感谢您的帮助!
答案 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
open
和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包含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。