csv 文件中的行数

Posted

技术标签:

【中文标题】csv 文件中的行数【英文标题】:Row count in a csv file 【发布时间】:2015-02-14 17:31:33 【问题描述】:

我可能犯了一个愚蠢的错误,但我找不到它在哪里。我想计算我的 。我写了这个,显然没有用:我有row_count = 0,而它应该是 400。干杯。

f = open(adresse,"r")
reader = csv.reader(f,delimiter = ",")
data = [l for l in reader]
row_count = sum(1 for row in reader)

print row_count

【问题讨论】:

Count how many lines are in a CSV Python?的可能重复 这能回答你的问题吗? How to get line count of a large file cheaply in Python? 发生这种情况的原因是阅读器通过创建data 列表“清空”了自己。 reader 对象提供了一个一次性的 for 循环,一旦你完成了它,它就消失了。这就是 row_count 被读取为 0 的原因:此时阅读器中没有任何内容。 【参考方案1】:

重要的东西隐藏在解决方案的 cmets 部分,标记为正确。

在此处重新分享 Erdős-Bacon 的解决方案以获得更好的可见性。

为什么? 因为:它节省了大量内存而无需创建列表。

所以我觉得这样做比较好


def read_raw_csv(file_name):
    with open(file_name, 'r') as file:
        csvreader = csv.reader(file)

        # count number of rows
        entry_count = sum(1 for row in csvreader)
        print(entry_count-1)  # -1 is for discarding header row.

结帐this链接了解更多信息

【讨论】:

【参考方案2】:

我会考虑使用生成器。它可以完成这项工作,并让您免受任何形式的 MemoryError 的伤害

def generator_count_file_rows(input_file):
    for row in open(input_file,'r'):
        yield row

然后

for row in generator_count_file_rows('very_large_set.csv'):
        count+=1

【讨论】:

【参考方案3】:

只需在 Notepad++ 中打开 csv 文件。它立即显示总行数。 :) 要么 在 cmd 提示符下,在命令中提供文件路径和密钥 find \c \v "一些无意义的字符串" Filename.csv

【讨论】:

OP想知道如何修复python脚本。【参考方案4】:
# with built in libraries
opened_file = open('f.csv')
from csv import reader

read_file = reader(opened_file)
apps_data = list(read_file)

rowcount = len(apps_data) #which incudes header row

print("Total rows incuding header: " + str(rowcount))

【讨论】:

【参考方案5】:

如果你正在使用 python3 并安装了 pandas 库,你可以使用

import pandas as pd

results = pd.read_csv('f.csv')

print(len(results))

【讨论】:

【参考方案6】:

首先你必须用 open 打开文件

input_file = open("nameOfFile.csv","r+")

然后使用 csv.reader 打开 csv

reader_file = csv.reader(input_file)

最后可以用'len'指令取行数

value = len(list(reader_file))

总代码是这样的:

input_file = open("nameOfFile.csv","r+")
reader_file = csv.reader(input_file)
value = len(list(reader_file))

记住,如果你想重用csv文件,你必须创建一个input_file.fseek(0),因为当你为reader_file使用一个列表时,它会读取所有文件,并且文件中的指针会改变它的位置

【讨论】:

【参考方案7】:
with open(adresse,"r") as f:
    reader = csv.reader(f,delimiter = ",")
    data = list(reader)
    row_count = len(data)

当文件指针在保存data 列表后已经到达文件末尾时,您正尝试读取文件两次。

【讨论】:

请注意:如果您在阅读器上列出,您将失去其作为生成器的优势。 这会通过创建该列表将大量数据潜在地读入内存(尽管很短暂)。我认为如果我们想要条目计数,最好只执行entry_count = sum(1 for row in reader) 之类的操作,如果我们想要计算文件中的所有行(包括标题行),最好使用line_count = sum(1 for line in f) @Erdős-Bacon 我只是在修复 OP 的代码,但这是正确的

以上是关于csv 文件中的行数的主要内容,如果未能解决你的问题,请参考以下文章

csv 文件中的行数

csv 文件中的行数

Rspec:测试CSV输出中的行数

Pyspark 的 sqlContext.read.csv() 函数读取的行数比实际 .csv 文件中的行数多

作业-- 统计文本文件中的字符数单词数行数

python中CSV文件的行数错误