Сколько строк в 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
Ответы
Ответ 1
Вам нужно подсчитать количество строк:
row_count = sum(1 for row in fileObject) # fileObject is your csv.reader
Использование sum()
с выражением генератора делает эффективный счетчик, избегая хранения всего файла в памяти.
Если вы уже прочитали 2 строки для начала, вам нужно добавить эти 2 строки в общую сумму; строки, которые уже были прочитаны, не учитываются.
Ответ 2
РЕДАКТИРОВАТЬ 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
sample_submission.csv имеет sample_submission.csv
МБ и 31 миллион символов.
Ответ 3
Чтобы сделать это, вам нужно немного кода, как мой пример здесь:
file = open("Task1.csv")
numline = len(file.readlines())
print (numline)
Я надеюсь, что это помогает всем.
Ответ 4
Некоторые из приведенных выше предложений подсчитывают количество LINES в файле csv. Но некоторые файлы CSV содержат строки с кавычками, которые сами содержат символы новой строки. Файлы MS CSV обычно ограничивают записи с помощью \r\n, но используют только \n в цитированных строках.
Для файла, подобного этому, подсчет строк текста (как указано в новой строке) в файле даст слишком большой результат. Поэтому для точного подсчета вам нужно использовать csv.reader для чтения записей.
Ответ 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
Используйте "список", чтобы соответствовать более работоспособному объекту.
Вы можете посчитать, пропустить, мутировать, пока не пожелает ваше сердце:
list(fileObject) #list values
len(list(fileObject)) # get length of file lines
list(fileObject)[10:] # skip first 10 lines
Ответ 8
Сначала вам нужно открыть файл с открытым
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, он считывает весь файл, а указатель в файле меняет свою позицию
Ответ 9
когда вы создаете экземпляр объекта 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)
Ответ 10
может попробовать что-то простое, как показано ниже в командной строке:
sed -n '$=' filename
или
wc -l filename
Ответ 11
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
Ответ 12
Это работает для csv и всех файлов, содержащих строки в Unix-системах:
import os
numOfLines = int(os.popen('wc -l < file.csv').read()[:-1])
Если файл csv содержит строку полей, вы можете вычесть ее из numOfLines
выше:
numOfLines = numOfLines - 1
Ответ 13
пытаться
data = pd.read_csv("data.csv")
data.shape
и в выводе вы можете увидеть что-то вроде (aa, bb), где aa - это количество строк
Ответ 14
Я думаю, что мы можем немного улучшить лучший ответ, я использую:
len = sum(1 for _ in reader)
Более того, мы не должны забывать, что Python-код не всегда имеет лучшую производительность в проекте. Например: если мы можем одновременно выполнять больше операций в одном и том же наборе данных, лучше делать все в одном и том же бугле, вместо этого сделайте два или более питоновых букала.
Ответ 15
import pandas as pd
data = pd.read_csv('data.csv')
totalInstances=len(data)