python - python中CSV文件的行数错误
问题描述
我正在处理一个 csv 文件,在此之前我使用下面的代码获取行数。
total_rows=sum(1 for row in open(csv_file,"r",encoding="utf-8"))
代码是在此链接中提供的帮助下编写的。但是,total_rows 与 csv 文件中的实际行数不匹配。我找到了一种替代方法,但想知道为什么这不能正常工作?
在 CSV 文件中,有包含大量文本的单元格,我必须使用编码来避免读取 csv 文件时出错。
任何帮助表示赞赏!
解决方案
假设您有一个 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
' 的第一个单元格(又名巨大的文本块)现在被正确处理,引号包裹了整个文本。
推荐阅读
- python - 使用最小堆的列表中的第 K 个最大元素
- reactjs - 如何将(手动)接口构造从 React tsx 翻译成 React jsx?
- triggers - 在 arm 模板中使用时区触发 azure 数据工厂无法正常工作
- reactjs - 使用 DualList 组件呈现和添加数据时出现问题
- firebase - Firebase 可调用函数失败
- typescript - 打字稿扩展原始类型
- javascript - 打字稿。未捕获的 ReferenceError:显示未在 HTMLInputElement.onchange 中定义
- sql - SQL 表中的重复项:如何根据行值映射重复项?
- spring-webflux - 如何验证 Webflux/Webclient 中的错误正文
- c++ - 当我在函数中定义时,cpp 组合中没有定义