问题:计算CSV Python中有多少行?
我正在使用python(Django Framework)读取CSV文件。如您所见,我仅从该CSV中提取了2行。我一直在尝试将CSV的总行数存储在变量中。
如何获得总行数?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
    data.append(fileObject.next()) 
我努力了:
len(fileObject)
fileObject.length
回答 0
您需要计算行数:
row_count = sum(1 for row in fileObject)  # fileObject is your csv.reader使用sum()与生成器表达使一个有效的计数器,从而避免在存储器中存储整个文件。
如果您已经开始阅读两行,那么您需要将这两行加到总计中;已读取的行不计在内。
回答 1
2018-10-29编辑
谢谢你的意见。
我测试了几种代码来获取csv文件中的行数(以速度为单位)。最好的方法如下。
with open(filename) as f:
    sum(1 for line in f)这是经过测试的代码。
import timeit
import csv
import pandas as pd
filename = './sample_submission.csv'
def talktime(filename, funcname, func):
    print(f"# {funcname}")
    t = timeit.timeit(f'{funcname}("{filename}")', setup=f'from __main__ import {funcname}', number = 100) / 100
    print('Elapsed time : ', t)
    print('n = ', func(filename))
    print('\n')
def sum1forline(filename):
    with open(filename) as f:
        return sum(1 for line in f)
talktime(filename, 'sum1forline', sum1forline)
def lenopenreadlines(filename):
    with open(filename) as f:
        return len(f.readlines())
talktime(filename, 'lenopenreadlines', lenopenreadlines)
def lenpd(filename):
    return len(pd.read_csv(filename)) + 1
talktime(filename, 'lenpd', lenpd)
def csvreaderfor(filename):
    cnt = 0
    with open(filename) as f:
        cr = csv.reader(f)
        for row in cr:
            cnt += 1
    return cnt
talktime(filename, 'csvreaderfor', csvreaderfor)
def openenum(filename):
    cnt = 0
    with open(filename) as f:
        for i, line in enumerate(f,1):
            cnt += 1
    return cnt
talktime(filename, 'openenum', openenum)结果如下。
# sum1forline
Elapsed time :  0.6327946722068599
n =  2528244
# lenopenreadlines
Elapsed time :  0.655304473598555
n =  2528244
# lenpd
Elapsed time :  0.7561274056295324
n =  2528244
# csvreaderfor
Elapsed time :  1.5571560935772661
n =  2528244
# openenum
Elapsed time :  0.773000013928679
n =  2528244总之,sum(1 for line in f)是最快的。但是与可能没有太大区别len(f.readlines())。
sample_submission.csv 是30.2MB,具有3100万个字符。
回答 2
为此,您需要像我的示例一样有一些代码:
file = open("Task1.csv")
numline = len(file.readlines())
print (numline)希望对大家有帮助。
回答 3
上面的一些建议计算了csv文件中的LINES数量。但是某些CSV文件将包含带引号的字符串,这些字符串本身包含换行符。MS CSV文件通常用\ r \ n分隔记录,但在带引号的字符串中单独使用\ n。
对于这样的文件,计算文件中的文本行(由换行符分隔)将导致太大的结果。因此,为了获得准确的计数,您需要使用csv.reader来读取记录。
回答 4
首先,您必须使用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的列表时,它将读取所有文件,并且文件中的指针会更改其位置
回答 5
row_count = sum(1 for line in open(filename)) 为我工作。 
注意:sum(1 for line in csv.reader(filename))似乎要计算第一行的长度
回答 6
numline = len(file_read.readlines())回答 7
当实例化一个csv.reader对象并遍历整个文件时,可以访问提供行数的名为line_num的实例变量:
import csv
with open('csv_path_file') as f:
    csv_reader = csv.reader(f)
    for row in csv_reader:
        pass
    print(csv_reader.line_num)回答 8
import csv
count = 0
with open('filename.csv', 'rb') as count_file:
    csv_reader = csv.reader(count_file)
    for row in csv_reader:
        count += 1
print count回答 9
使用“列表”适合更可行的对象。
然后,您可以计数,跳过,变异,直到您的内心渴望:
list(fileObject) #list values
len(list(fileObject)) # get length of file lines
list(fileObject)[10:] # skip first 10 lines回答 10
您还可以使用经典的for循环:
import pandas as pd
df = pd.read_csv('your_file.csv')
count = 0
for i in df['a_column']:
    count = count + 1
print(count)回答 11
可能想在命令行中尝试以下简单的操作:
sed -n '$=' filename
要么
wc -l filename
回答 12
这适用于csv和所有基于Unix的操作系统中包含字符串的文件:
import os
numOfLines = int(os.popen('wc -l < file.csv').read()[:-1])如果csv文件包含一个字段行,则可以从numOfLines上面扣除一个:
numOfLines = numOfLines - 1回答 13
我认为我们可以改善最佳答案,我正在使用:
len = sum(1 for _ in reader)此外,我们不应忘记pythonic代码在项目中并非总是具有最佳性能。例如:如果我们可以在同一数据集中同时执行更多操作,最好在同一个气泡中全部进行操作,而不是制作两个或多个pythonic气泡。
回答 14
尝试
data = pd.read_csv("data.csv")
data.shape在输出中,您可以看到类似(aa,bb)的图形,其中aa是行数
回答 15
import pandas as pd
data = pd.read_csv('data.csv') 
totalInstances=len(data)
