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 文件中的行数的主要内容,如果未能解决你的问题,请参考以下文章