统计CSV Python中有多less行?
我正在使用Python(Django框架)来读取CSV文件。 你可以看到,我只从这个CSV中拉出两行。 我一直在试图做的是在一个variables中存储CSV的总行数。
我怎样才能得到总的行数?
file = object.myfilePath fileObject = csv.reader(file) for i in range(2): data.append(fileObject.next())
我努力了:
len(fileObject) fileObject.length
你需要计算行数:
row_count = sum(1 for row in fileObject) # fileObject is your csv.reader
将sum()
与生成器expression式结合使用可以提高计数器的效率,避免将整个文件存储在内存中。
如果你已经读了2行开始,那么你需要添加这2行到你的总数; 已经被读取的行不被计数。
我testing了几种代码来获取csv文件中的行速度。
import time import csv import pandas as pd filename = './sample_submission.csv' print("# sum(1 for line in open(filename)) ") t0 = time.time() n = sum(1 for line in open(filename)) print('Elapsed time : ', time.time() - t0) print('n = ', n) print('\n') print("# sum(1 for line in csv.reader(filename))") t0 = time.time() n = sum(1 for line in csv.reader(filename)) print('Elapsed time : ', time.time() - t0) print('n = ', n) print('\n') print("# sum(1 for line in pd.read_csv(filename)) ") t0 = time.time() n = sum(1 for line in pd.read_csv(filename)) print('Elapsed time : ', time.time() - t0) print('n = ', n) print('\n') print("# len(open(filename).readlines())") t0 = time.time() n = len(open(filename).readlines()) print('Elapsed time : ', time.time() - t0) print('n = ', n) print('\n') print("# len(pd.read_csv(filename)") t0 = time.time() n = len(pd.read_csv(filename)) + 1 print('Elapsed time : ', time.time() - t0) print('n = ', n) print('\n') print("# len(csv.reader(filename).readlines())") t0 = time.time() n = sum(1 for row in csv.reader(filename)) print('Elapsed time : ', time.time() - t0) print('n = ', n) print('\n') print("# for row in csv_reader:") t0 = time.time() count = 0 with open(filename, 'r') as count_file: csv_reader = csv.reader(count_file) for row in csv_reader: count += 1 print('Elapsed time : ', time.time() - t0) print('count = ', count) print('\n') print("# for i, line in enumerate(f, 1):") t0 = time.time() count = 0 with open(filename) as f: for i, line in enumerate(f, 1): count += 1 print('Elapsed time : ', time.time() - t0) print('count = ', count) print('\n')
结果是…
# sum(1 for line in open(filename)) Elapsed time : 0.6273655891418457 n = 2528244 # sum(1 for line in csv.reader(filename)) Elapsed time : 0.0 n = 23 # sum(1 for line in pd.read_csv(filename)) Elapsed time : 0.6410923004150391 n = 2 # len(open(filename).readlines()) Elapsed time : 0.6181032657623291 n = 2528244 # len(pd.read_csv(filename) Elapsed time : 0.623377799987793 n = 2528244 # len(csv.reader(filename).readlines()) Elapsed time : 0.0 n = 23 # for row in csv_reader: Elapsed time : 2.1439998149871826 count = 2528244 # for i, line in enumerate(f, 1): Elapsed time : 0.9610662460327148 count = 2528244
注意在一些代码中,总行不能正确显示。
最好的select是…
-
sum(1 for line in open(filename))
-
len(open(filename).readlines())
-
len(pd.read_csv(filename)) + 1
要做到这一点,你需要有一些像我这里的例子一样的代码
file = open("Task1.csv") numline = len(file.readlines()) print (numline)
希望这有助于每个人
以上几点build议都计算了csv文件中LINES的数量。 但一些CSV文件将包含引用的string,其本身包含换行符。 MS CSV文件通常用\ r \ n分隔logging,但在引用string中单独使用\ n。
对于像这样的文件,在文件中计算文本的行数(由换行符分隔)将会导致太大的结果。 因此,为了准确计数,您需要使用csv.reader来读取logging。
使用“列表”来适应更可行的对象。
然后,你可以计算,跳过,变异,直到你的心愿:
list(fileObject) #list values len(list(fileObject)) # get length of file lines list(fileObject)[10:] # skip first 10 lines
numline = len(file_read.readlines())
可能要在命令行中尝试如下所示的简单操作:
sed -n '$=' filename
或wc -l filename
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
这适用于csv和包含string的所有文件:
import os numOfLines = int(os.popen('wc -l < file.csv').read()[:-1])
如果csv文件包含一个字段行,您可以从上面的numOfLines
扣除一个:
numOfLines = numOfLines - 1
首先你必须打开文件
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文件,则必须创build一个input_file.fseek(0),因为当您使用reader_file的列表时,它会读取所有文件,并且文件中的指针会更改其位置