Перейти к содержимому

Как посчитать количество строк в файле python

  • автор:

Программа Python для подсчета количества строк, присутствующих в файле

В Python есть несколько встроенных в файл функций, которые можно использовать для подсчета количества строк, присутствующих в файле. Откроем блокнот и напишем в него несколько строк текста. Затем используйте этот файл в программе обработки файлов на Python, чтобы подсчитать общее количество строк, присутствующих в файле. Режим «r» определяется чтением текста файла.

Синтаксис

В примере используется следующий синтаксис:

with open("file_name.txt", mode) 

Метод open используется для открытия файла в Python. Это принимает два параметра —

    имя_файла.txt — укажите имя файла.
readlines("write some text") 

Метод readlines() возвращает список текстовых строк, существующих в файле.

Метод len используется для возврата длины переменной.

Алгоритм

  • Запустите метод ‘with open()’, который принимает два параметра: ‘tutebox.txt’(имя файла) и ‘r’ (читайте файл). Укажите имя объекта как файл, чтобы выполнить итерацию каждой строки в цикле for.
  • Затем инициализируйте переменную с именем ’cnt’ значением «0», которое будет отслеживать строку подсчета с самого начала. [Пример 1]
  • Затем используйте встроенный метод readlines() и сохраните его в переменной li. [Пример 2]
  • Затем используйте цикл for в файле для перебора каждой строки, а затем увеличьте счетчик на плюс 1, что подсчитает всю строку. [Пример 1]
  • Затем вычислите общую длину, используя len, который принимает параметр с именем li, и сохраните его в total_line.[Пример 2]
  • Распечатайте результат с помощью переменной с именем «cnt». [Пример 1]
  • Наконец, мы печатаем результат с помощью переменной total_line. [Пример 2]

Пример 1

В этой программе мы создаем объект с именем file для работы с методом open(), который будет читать файл. Для подсчета количества строк он увеличивает счетчик, добавляя 1.

#Count the number of lines in python with open('tutebox.txt','r') as file: cnt = 0 for line in file: cnt += 1 print(f"The counting of number of lines is: ") 

Выход

The counting of number of lines is: 6 

Пример 2

В этой программе мы используем режим обработки файлов в Python для чтения текста из файла. Для подсчета строк он использует метод readlines() и возвращает общее количество строк методом len().

with open('tutebox.txt','r') as file: li = file.readlines() total_line = len(li) print(f"Number of lines in the notepad file: ") 

Выход

Number of lines in the notepad file: 6 

Заключение

Мы увидели разницу между двумя примерами, применив к файлу режим «r». В обоих примерах показано открытие файла с помощью метода with open(). В примере 1 использовалась концепция цикла for для определения общего количества строк, присутствующих в файле, тогда как в примере 2 использовалась концепция предопределенного метода в Python.

Все права защищены. © Linux-Console.net • 2019-2023

Вывести количество строк в файле

Подскажите, пожалуйста, как вывести количество строк, загруженных из файла? Я написал следующий код, но он выводит именно содержимое строк. А мне нужно количество:

def file_load(): with open("proxy.txt") as proxy: ips = [row.rstrip() for row in proxy] with open("user-agents.txt") as user_agents: ua = [row.rstrip() for row in user_agents] with open("referers.txt") as referers: ref = [row.rstrip() for row in referers] print('Loaded: ', ips, 'proxies,', ua, 'user-agents,', ref, 'referers') 

Отслеживать
задан 1 авг 2016 в 10:24
JamesJGoodwin JamesJGoodwin
3,968 6 6 золотых знаков 39 39 серебряных знаков 74 74 бронзовых знака

7 ответов 7

Сортировка: Сброс на вариант по умолчанию

Чтобы вывести количество строк в файле, не обязательно сами строки сохранять, достаточно просто посчитать сколько раз символ новой строки встречается в тексте:

def count_lines(filename, chunk_size=1<<13): with open(filename) as file: return sum(chunk.count('\n') for chunk in iter(lambda: file.read(chunk_size), '')) 

Файл открывается в текстовом режиме (перевод строки преобразуется в '\n' на всех системах), читается блоками по 8K символов в каждом до конца файла и количество '\n' в каждом блоке суммируется, чтобы найти общее число строк.

Код предполагает, что все строки, включая последнюю, заканчиваются символом новой строки также как wc -l утилита (принято на POSIX, иначе например, подумайте что будет, если вызвать cat *.txt ). Если последний символ не новая строка, последняя строка не считается (руками единицу добавить можно в этом случае).

Имея count_lines() функцию, легко получить желаемый вывод:

print('Loaded: proxies, user-agents, ' ' referers'.format( nproxies=count_lines('proxy.txt'), nuser_agents=count_lines('user-agents.txt'), nreferrers=count_lines('referers.txt'))) 

Отслеживать
ответ дан 1 авг 2016 в 18:16
52.3k 11 11 золотых знаков 108 108 серебряных знаков 312 312 бронзовых знаков

@Igor: в ответе явно сказано: "читается блоками по 8K символов в каждом". В памяти только один блок одновременно присутствует. Другими словами, можно большие файлы свободно таким образом читать, не боясь всю память съесть.

1 авг 2016 в 18:42

@Igor: код в ответе работает как для маленьких так и для больших файлов. Нельзя ожидать, что все люди, которые находят в поисковике вопрос: "Вывести количество строк в файле" будут иметь маленькие файлы. Если вас интересует производительность, то код, похожий на используемый в ответе, может работать даже быстрее C++ аналога, сравнимо с wc -l вариантом

1 авг 2016 в 19:01

Для огромных файлов которые не влезают в память это действительно лучший вариант из тех что встречал ранее. Да и кроме счетчика строк file.read(chunk_size) можно ведь использовать для других операций, для бинарных файлов тоже скорее всего будет работать.

1 авг 2016 в 19:14

Нашел ошибку в данном методе пока писал вариант с регулярными выражениями. Последнего \n может не быть, будет на 1 элемент меньше. В коде нужно будет проверять конец файла и последние символы для правильного расчета.

1 авг 2016 в 19:53

@Igor Нет необходимости два раза файл читать. Достаточно, явный цикл использовать и добавить единицу в конце, если необходимо: ..chunk = "\n" $ for chunk in iter(..): nlines += chunk.count('\n') $ return nlines + (not chunk.endswith('\n'))

1 авг 2016 в 20:25

Если проникнуться дзеном пайтона:

sum(1 for line in open('file', ‘r’)) 

На мой взгляд это то, что вам нужно, в легко понятном виде.

Отслеживать
ответ дан 19 мар 2017 в 20:07
MrNinjamannn MrNinjamannn
209 3 3 серебряных знака 6 6 бронзовых знаков

print('Loaded: ', len(ips), 'proxies,', len(ua), 'user-agents,', len(ref), 'referers') 

Отслеживать
ответ дан 1 авг 2016 в 10:29
Abbasov Alexander Abbasov Alexander
161 4 4 бронзовых знака

Тогда выводится вот такая строка: ('Loaded: ', 274, 'proxies,', 7478, 'user-agents,', 350, 'referers') А я хочу, чтобы была такая строка: Loaded: 274 proxies, 7478 user-agents, 350 referers

1 авг 2016 в 10:30
print('Loaded: <> proxies, <> user-agents, <> referers'.format(len(ips), len(ua), len(ref)))
1 авг 2016 в 10:51
@kmmik спасибо!
1 авг 2016 в 10:55

Вывести количество строк с помощью регулярного выражения. Особенность. Если последняя строка не пустая, то выведет количество на 1 элемент меньше.

import re # выведет все строки включая пустые len(re.findall(r"[\n']+?", open('bash.txt').read())) # выведет количество без пустых строк len(re.findall(r"[\n']+", open('bash.txt').read())) 

На больших файлах ко всему файлу сразу применять не желательно, возможно проверить на пустые строки построчно или прочитав часть файла, потом сложив длину.

пример текстового файла

1. sudo pip3 install django-markdown-deux 2. sudo pip3 install django-filter 3. sudo pip3 install sorl-thumbnail 4. sudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev 5. sudo pip3 install Pillow 6. sudo apt-get install libgraphicsmagick++-dev 7. sudo apt-get install libboost-python1.40-dev 8. sudo apt-get install imagemagick 9. sudo apt-get install graphicsmagick 10. 11. 12. sudo apt-get install libmagickwand-dev 13. sudo pip3 install Wand 14. 15. sudo python3 manage.py makemigrations thumbnail 

Как это работает. В данном случае жадность регулярного выражения отключена.

>>> re.findall(r"[\n']+?", open('bash.txt').read()) ['\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n'] 14 

Жадность включена, из-за жадности регулярных выражений \n\n будут вместе там где ничего нет кроме переноса

>>> re.findall(r"[\n']+", open('bash.txt').read()) ['\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n\n\n', '\n', '\n\n', '\n'] 11 

Если посчитаем стандартно, то получим включая пустые строки, что пустая строка тоже строка. Этот метод считает всегда количество строк как мы это понимаем.

>>> len(open('bash.txt').readlines()) 15 

Причина по которой отличается количество

'sudo pip3 install django-markdown-deux\nsudo pip3 install django-filter\nsudo pip3 install sorl-thumbnail\nsudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev\nsudo pip3 install Pillow\nsudo apt-get install libgraphicsmagick++-dev\nsudo apt-get install libboost-python1.40-dev\nsudo apt-get install imagemagick\nsudo apt-get install graphicsmagick\n\n\nsudo apt-get install libmagickwand-dev\nsudo pip3 install Wand\n\nsudo python3 manage.py makemigrations thumbnail' 

видна здесь, в конце нет переноса строки который считаем.

Вариант исправления количества строк для регулярных выражений, файл придется читать второй раз с конца.

from __future__ import with_statement #tell() with open('bash.txt', "r") as f: f.seek (0, 2) fsize = f.tell() f.seek (max (fsize-68, 0), 0) lines = f.readlines() lines[-1:] if '\n' in lines[-1:]: print("no") else: print("+1") 

Если символа переноса в последней строке нет, то прибавить плюс 1, в данном случае просто вывод на экран.

Алтернативное решение этой же проблемы чтение файла с начала построчно, далее взять последнюю строку и проверить в ней символ

open('bash.txt', "r").readlines()[-1:] 

Подсчет строк, слов и символов в файле

Цикл for языка Python извлекает из файлового объекта данные построчно (одну строку на каждой итерации цикла). Таким образом, количество итераций цикла определит количество строк в файле.

Встроенная функция len() языка Python считает количество элементов в передаваемой в нее объекте. С ее помощью находится количество символов в каждой строке.

Строковый метод split() разбивает строку на части. По-умолчанию разделение происходит по местам расположения пробелов в строке. Таким образом, мы можем определить количество слов в каждой строке, посчитав с помощью len() слова в получившемся после применения split() списке.

На каждой итерации цикла мы должны добавлять полученные значения к переменным, хранящим общие количества строк, слов и символов.

file = open('text.txt') lines = 0 words = 0 symbols = 0 for line in file: lines += 1 words += len(line.split()) symbols += len(line) print("Lines:", lines) print("Words:", words) print("Symbols:", symbols)

Пусть содержимое файла text.txt будет таким:

one two three city town big small

Тогда программа даст следующий результат:

Lines: 3 Words: 7 Symbols: 34

Cимволами считаются не только буквы, также пробелы и переходы на новую строку (символ '\n' ). Если требуется не учитывать переход на новую строку как символ, его можно "отрезать" с помощью строкового метода strip() . Делается это перед тем, как строка передается в функцию len() : symbols += len(line.strip('\n')) .

Если данную задачу надо решить без использования продвинутых возможностей (встроенных функций и методов) языка программирования Python, а в рамках изучения алгоритмов или на более "низком" уровне, то программа может выглядеть так:

file = open('text.txt') text = file.read() lines = 0 words = 0 symbols = 0 in_word = False for char in text: symbols += 1 if char == '\n': lines += 1 if char != ' ' and char != '\n' and in_word == False: words += 1 in_word = True elif char == ' ' or char == '\n': in_word = False print("Lines:", lines) print("Words:", words) print("Symbols:", symbols)

Здесь на каждой итерации цикла мы имеем дело не с целой строкой, а с очередным символом. При этом увеличиваем на единицу переменную, хранящую количество символов, и, если текущий символ - это переход на новую строку, переменную для подсчета количества строк.

Для подсчета слов требуется определить в программе еще одну переменную, в которой будет храниться "сигнал", находимся ли мы внутри слова. Если это так, то очередной непробельный символ не следует считать началом нового слова и не надо увеличивать счетчик слов.

Алгоритм подсчета слов в программе выше следующий. Если текущий символ не пробел И не переход на новую строку, И ранее мы находились вне слова ( in_word == False ), то есть соблюдены все три условия сразу, значит началось новое слово. Поэтому увеличиваем счетчик слов и устанавливаем in_word в значение True . Последнее действие позволит на следующей итерации цикла, при условии обработки второй и послеющих букв слова, не соблюдаться условию in_word == False и не увеличивать счетчик слов.

Мы "сбрасываем" in_word в False , только когда встречаем пробельный символ ИЛИ переход на новую строку (любое одно из двух условий).

Программа выше, также как в первом варианте, считает переход на новую строку за символ. Если требуется его исключить, можно поместить увеличение значения счетчика символов в ветку else :

. for char in text: if char == '\n': lines += 1 else: symbols += 1 .

Если очередной символ - это переход на новую строку, увеличивается счетчик строк. В остальных случаях, - счетчик символов.

Если файл большой, то считывать сразу все его содержимое в строковую переменную ( text = file.read() ) неблагоразумно. Если читать файл посимвольно ( file.read(1) ), то условием завершения работы цикла будет момент возрата методом read() пустой строки, что означает конец файла (в других языках может быть специальный символ конца файла, доступный через идентификатор EOF - end of file).

lines = 0 words = 0 symbols = 0 in_word = False with open('text.txt') as file: while True: char = file.read(1) if char == '': break symbols += 1 if char == '\n': lines += 1 if char not in (' ', '\n') and not in_word: words += 1 in_word = True elif char in (' ', '\n'): in_word = False print("Lines:", lines) print("Words:", words) print("Symbols:", symbols)

В этом примере для открытия файла используется оператор with , который рекомендован для работы с файлами. Выражения char not in (' ', '\n') and not in_word и char in (' ', '\n') по смыслу аналогичны соответствующим логическим выражениям из предыдущих вариантов программы.

X Скрыть Наверх

Решение задач на Python

Как посчитать количество строк в текстовом файле - Python

facebook vk instagram Телеграм youtube

Хочешь стать успешным разработчиком
приложений? Тогда добро пожаловать к нам.

обучись профессии будущего

Все права защищены © 2014-2024 GURU

Наши контакты
Позвоните мне

Позвоните мне
Список поддерживаемых устройств

Mac mini 2020 года и новее
iMac 2019 года и новее
iMac Pro 2017 года
Mac Pro 2019 года и новее
MacBook Air 2019 года и новее
MacBook 2017 года и новее MacBook Pro 2018 года и новее

Приложение в App Store

В App Store публикуется только то приложение, которое есть в данной программе курса, данное приложение должно быть написано под руководством преподавателя
Приложение публикуется только в одном экземпляре
Сторонние приложения, которые не были написаны в данном курсе и или под руководством преподавателя мы не публикуем в App Store

«Пятиминутка» - в начале урока, первые 5 минут, Вы сможете ответить на вопросы – устно, из прошлых тем. А уже после этого, продолжите урок – по теме.
«Пятиминутка», будет не на каждом уроке, а только иногда.
Мы предполагаем, это улучшит процесс обучения на 2% – 4.5%

Блиц – это проверка усвоенного материала учеником.
В течение 1 часа (60 минут) преподаватель задаёт вопросы по пройденным темам, и ученик пишет код, одновременно комментируя и отвечая на вопросы преподавателя.

Мы уверены в эффективности данного подхода, он позволит нам понять, уровень усвоенного материала, а так же выявить темы, которые были не до конца усвоены и требуют дополнительного домашнего задания.

Тем самым сможем анализировать ответы, улучшая программы курсов и обучающий процесс.

На данном уроке, будут практические задачи, разных уровней сложности, по пройденным темам курса. Все практические задания будут объяснены - показано несколько вариантов, как можно их решить разным способом – усложнить или упростить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *