首页 > 解决方案 > python中CSV文件的行数错误

问题描述

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

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

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

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

任何帮助表示赞赏!

标签: pythoncsv

解决方案


假设您有一个 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' 的第一个单元格(又名巨大的文本块)现在被正确处理,引号包裹了整个文本。


推荐阅读