Подсчитайте, сколько строк в CSV Python?
Я использую python (Django Framework) для чтения CSV-файла. Я вытаскиваю только 2 строки из этого CSV, как вы можете видеть. То, что я пытался сделать, это сохранить в переменной общее количество строк CSV также.
как я могу получить общее количество строк?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
Я пробовал:
len(fileObject)
fileObject.length
11 ответов:
нужно подсчитать количество строк:
row_count = sum(1 for row in fileObject) # fileObject is your csv.reader
используя
sum()
с генератором выражение делает для эффективного счетчика, избегая хранения всего файла в памяти.Если вы уже прочитали 2 строки для начала, то вам нужно добавить эти 2 строки к общей сумме; строки, которые уже были прочитаны, не учитываются.
я протестировал несколько видов кода, чтобы получить строки в 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
обратите внимание, что в некоторых кодах итоговые строки отображаются неправильно.
самый лучший выбор был бы...
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)
надеюсь, это поможет всем
несколько из приведенных выше предложений подсчитывают количество строк в csv-файле. Но некоторые CSV-файлы будут содержать строки в кавычках, которые сами содержат символы новой строки. MS CSV файлы обычно разделяют записи с \r\n, но использовать \n только в кавычках строк.
для такого файла подсчет строк текста (разделенных новой строкой) в файле даст слишком большой результат. Поэтому для точного подсчета вам нужно использовать csv.читатель, чтобы прочитать записи.
row_count = sum(1 for line in open(filename))
работал для меня.Примечание :
sum(1 for line in csv.reader(filename))
Кажется, вычислить длину первой строки
используйте "список", чтобы соответствовать более удобному объекту.
затем вы можете считать, пропустить, мутировать до желания вашего сердца:
list(fileObject) #list values len(list(fileObject)) # get length of file lines list(fileObject)[10:] # skip first 10 lines
возможно, вы захотите попробовать что-то простое, как показано ниже в командной строке:
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
сначала вы должны открыть файл с open
input_file = open("nameOfFile.csv","r+")
затем используйте csv.устройство для чтения откройте CSV -
reader_file = csv.reader(input_file)
наконец, вы можете взять номер строки с инструкцией 'лен'
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, он читает весь файл, а указатель в файле изменяет его позиция