我正在使用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
我正在使用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
Answers:
您需要计算行数:
row_count = sum(1 for row in fileObject) # fileObject is your csv.reader
使用sum()
与发电机表达使一个有效的计数器,从而避免在存储器中存储整个文件。
如果您已经开始阅读两行,那么您需要将这两行加到总计中;已读取的行不计在内。
\x1A
)字符?您是如何打开文件的?
file.seek(0)
然后fileObject = csv.reader(file)
谢谢你的意见。
我测试了几种代码来获取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万个字符。
首先,您必须使用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的列表时,它将读取所有文件,并且文件中的指针会更改其位置
row_count = sum(1 for line in open(filename))
为我工作。
注意:sum(1 for line in csv.reader(filename))
似乎要计算第一行的长度
numline = len(file_read.readlines())
file_read
显然是一个csv.reader()
对象,因此它不具有一个readlines()
方法。.readlines()
必须创建一个可能很大的列表,然后将其再次丢弃。
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
可能想在命令行中尝试以下简单的操作:
sed -n '$=' filename
要么
wc -l filename
尝试
data = pd.read_csv("data.csv")
data.shape
在输出中,您可以看到类似(aa,bb)的图形,其中aa是行数
data.shape[0]
import pandas as pd
data = pd.read_csv('data.csv')
totalInstances=len(data)
file_read
啊 它是文件句柄file_read = open("myfile.txt")
吗(如?