Я использую python (Django Framework) для чтения файла CSV. Как видите, я вытащил из этого CSV всего 2 строки. Я пытался сохранить в переменной общее количество строк в CSV.
Как я могу получить общее количество строк?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
Я пытался:
len(fileObject)
fileObject.length
file_read
? Это дескриптор файла (как вfile_read = open("myfile.txt")
?Ответы:
Вам нужно посчитать количество строк:
Использование
sum()
выражения с генератором обеспечивает эффективный счетчик, избегая сохранения всего файла в памяти.Если вы уже прочитали 2 строки для начала, вам нужно добавить эти 2 строки к общему количеству; строки, которые уже были прочитаны, не учитываются.
источник
\x1A
)? Как ты открыл файл?file.seek(0)
затемfileObject = csv.reader(file)
2018-10-29 РЕДАКТИРОВАТЬ
Спасибо за комментарии.
Я протестировал несколько типов кода, чтобы узнать количество строк в CSV-файле с точки зрения скорости. Лучший способ - ниже.
Вот протестированный код.
Результат был ниже.
В заключение,
sum(1 for line in f)
самый быстрый. Но может и не быть существенной разницы отlen(f.readlines())
.sample_submission.csv
занимает 30,2 МБ и содержит 31 миллион символов.источник
for row in csv_reader:
решение, когда CSV должен содержать допустимые символы новой строки в кавычках согласно rfc4180 . @dixhom, какого размера был файл, который вы тестировали?Для этого вам понадобится немного кода, как в моем примере:
Надеюсь, это всем поможет.
источник
%time sum(1 for row in open("df_data_raw.csv"))
стоит 4,91 секунды, а%time len(open("df_data_raw.csv").readlines())
стоимость 14,6 секунды.Некоторые из приведенных выше предложений подсчитывают количество ЛИНИЙ в файле csv. Но некоторые файлы CSV будут содержать строки в кавычках, которые сами содержат символы новой строки. Файлы MS CSV обычно разделяют записи символом \ r \ n, но используют только \ n внутри строк в кавычках.
Для такого файла подсчет строк текста (разделенных символом новой строки) в файле даст слишком большой результат. Поэтому для точного подсчета вам нужно использовать csv.reader для чтения записей.
источник
Сначала вам нужно открыть файл с открытым
Затем используйте csv.reader для открытия csv
Наконец, вы можете взять номер строки с помощью инструкции len
Общий код такой:
Помните, что если вы хотите повторно использовать файл csv, вы должны создать input_file.fseek (0), потому что, когда вы используете список для reader_file, он читает весь файл, а указатель в файле меняет свою позицию
источник
row_count = sum(1 for line in open(filename))
работал у меня.Примечание:
sum(1 for line in csv.reader(filename))
похоже, рассчитывает длину первой строкиисточник
источник
file_read
видимому , являетсяcsv.reader()
объектом, поэтому он не имеет вreadlines()
метод..readlines()
должен создать потенциально большой список, который вы затем снова отбрасываете.когда вы создаете экземпляр объекта csv.reader и просматриваете весь файл, вы можете получить доступ к переменной экземпляра с именем line_num, предоставляющей количество строк:
источник
источник
Используйте «список» для более удобного размещения объекта.
Затем вы можете считать, пропускать, видоизменять, пока душе угодно:
источник
Это работает для csv и всех файлов, содержащих строки, в ОС на базе Unix:
Если файл csv содержит строку полей, вы можете вычесть ее
numOfLines
сверху:источник
Вы также можете использовать классический цикл for:
источник
возможно, вы захотите попробовать что-нибудь простое, как показано ниже, в командной строке:
sed -n '$=' filename
илиwc -l filename
источник
Думаю, мы можем немного улучшить лучший ответ, я использую:
Более того, не следует забывать, что питонический код не всегда имеет лучшую производительность в проекте. Например: если мы можем выполнять больше операций одновременно с одним и тем же набором данных, лучше делать все в одном и том же пакле, вместо того, чтобы создавать два или более питонических букла.
источник
источник
пытаться
и на выходе вы можете увидеть что-то вроде (aa, bb), где aa - это количество строк
источник
data.shape[0]