Подтвердить что ты не робот

Сколько строк в 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
4b9b3361

Ответ 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)