Подсчитайте, сколько строк в 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 55

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

обратите внимание, что в некоторых кодах итоговые строки отображаются неправильно.

самый лучший выбор был бы...

  1. sum(1 for line in open(filename))
  2. len(open(filename).readlines())
  3. 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
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

сначала вы должны открыть файл с 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, он читает весь файл, а указатель в файле изменяет его позиция

это работает для csv и всех файлов, содержащих строки в ОС на базе Unix:

import os

numOfLines = int(os.popen('wc -l < file.csv').read()[:-1])

Если csv-файл содержит строку полей, вы можете вычесть ее из numOfLines выше:

numOfLines = numOfLines - 1