Подсчет количества строк, слов и букв в текстовом файле
Данный вариант программы считает количество строк, слов и символов (с учетом пробелов) с помощью строковых методов.
Алгоритм решения задачи:
Цикл for на каждой итерации извлекает из файла очередную строку. В теле цикла происходят следующие действия:
- Счетчик строк увеличивается на 1.
- Строка разбивается на слова с помощью метода split . Функция len считает количество слов в получившемся списке слов. Это количество добавляется к счетчику слов.
- Чтобы не учитывать символ перехода на новую строку ( ‘\n’ ), удаляем его методом strip . Символьная длина оставшейся строки измеряется функцией len . Полученное значение добавляется к счетчику символов.
Текстовый файл:
Код программы:
Это более классический алгоритм решения задачи. Мы не используем функцию len и методы строки.
Строка перебирается посимвольно. В данном случае при подсчете символов не учитывается не только символ перехода на новую строку, также исключаются пробелы и символы табуляции.
Для подсчета количества слов вводится дополнительная переменная ( pos ), которая «показывает», находимся ли мы внутри слова или нет. Если встречается непробельный символ и до этого мы находились вне слова, значит началось новое слово. Счетчик слов следует увеличить на 1.
Python-сообщество
У меня есть текстовый файл, содержимое которого добавляеться построчно. Т.е. получаеться что новая строка это новый элемент. Необходимо при открытии файла узнать количество строк. Мне приходит в голову считать количество символов “\n” , но может есть способ проще?
#2 Июль 4, 2009 12:15:08
Как посчитать количество строк в файле?
len(open(‘file’, ‘r’).readlines()) если файл не очень большой.
#3 Июль 4, 2009 12:44:24
Как посчитать количество строк в файле?
sum(1 for l in open(‘file’, ‘r’)) если файл очень большой.
Отредактировано (Июль 4, 2009 12:45:40)
#4 Июль 6, 2009 00:49:35
Как посчитать количество строк в файле?
slivlen
ZZZ
Интересно, только кто файл закрывать в таком виде будет? 🙂
#5 Июль 6, 2009 10:44:33
Как посчитать количество строк в файле?
Он сам закроется…
#6 Июль 6, 2009 11:11:56
Как посчитать количество строк в файле?
igor.kaist
ну я лично привык руками все делать, а не оставлять Garbage Collector’у… На хабре народ вроде даже проверял — возможны проблемы при таком подходе. Вот тут: http://habrahabr.ru/blogs/python/62383/#comment_1722446
#7 Июль 6, 2009 15:05:06
Как посчитать количество строк в файле?
Вот уже сколько лет пишу на этом замечательном языке, сколько сотен (тысяч?) файлов им открыл и не закрыл руками, а проблемы с этим у меня ни разу не возникало. Так что предлагаю “забить и не парится”. Тем более, что файл открывается только для чтения и никакие кэши нам не страшны.
А если уж так хочется сделать это руками, то надо добавить ещё две строчки кода, что проблемой обычно не является.
Как подсчитать общее количество строк в текстовом файле с помощью Python
Здесь есть четыре строки, и теперь я хочу получить результат как четыре. Как я могу это сделать?
10 ответов
Вы можете использовать sum() с выражением генератора:
Обратите внимание, что вы не можете использовать len(f) , так как f является iterator. _ — это специальное имя переменной для переменных throwaway, см. Какова цель единственного подчеркивания «_» переменная в Python?.
Вы можете использовать len(f.readlines()) , но это создаст дополнительный список в памяти, который даже не будет работать с огромными файлами, которые не вписываются в память.
Эта ссылка (Как получить дешевый график в Python?) имеет множество потенциальных решений, но все они игнорируют один из способов сделать этот запуск значительно быстрее, а именно используя небуферизованный (необработанный) интерфейс, используя bytearrays и делая свою собственную буферизацию.
Используя модифицированную версию инструмента синхронизации, я считаю, что следующий код быстрее (и чуть более pythonic), чем любое из предлагаемых решений:
Вот мои тайминги:
Я бы разместил его там, но я являюсь относительно новым пользователем для обмена пакетами и не имею требуемой манны.
Это можно сделать полностью с выражениями генераторов in-line, использующими itertools, но это выглядит довольно странно:
Вы можете использовать sum() с выражением генератора. Выражение генератора будет [1, 1, . ] до длины файла. Затем мы вызываем sum() , чтобы добавить их все вместе, чтобы получить общее количество.
Кажется, что вы пытались, чтобы вы не хотели включать пустые строки. Затем вы можете:
Я не новичок в stackoverflow, просто не имел учетной записи и обычно приходил сюда для ответов. Я еще не могу прокомментировать или проголосовать за ответ. НО хотел сказать, что код от Майкла Бэкона выше работает очень хорошо. Я новичок в Python, но не для программирования. Я читал Python Crash Course, и есть несколько вещей, которые я хотел сделать, чтобы разбить крышку для чтения, чтобы охватить подход. Одной утилитой, использующей с точки зрения ETL или даже качества данных, было бы захват количества строк файла независимо от любого ETL. Файл имеет X количество строк, вы импортируете в SQL или Hadoop, и вы получаете X количество строк. Вы можете проверить на самом низком уровне количество строк файла необработанных данных.
Я играл с его кодом и делал некоторые тесты, и этот код очень эффективен до сих пор. Я создал несколько различных CSV файлов, различных размеров и строк. Вы можете увидеть мой код ниже, и мои комментарии содержат время и подробности. В приведенном выше коде Майкл Бэкон работает примерно в 6 раз быстрее, чем обычный метод Python для простого цикла линий.
Вывести количество строк в файле
Подскажите, пожалуйста, как вывести количество строк, загруженных из файла? Я написал следующий код, но он выводит именно содержимое строк. А мне нужно количество:
Чтобы вывести количество строк в файле, не обязательно сами строки сохранять, достаточно просто посчитать сколько раз символ новой строки встречается в тексте:
Файл открывается в текстовом режиме (перевод строки преобразуется в ‘\n’ на всех системах), читается блоками по 8K символов в каждом до конца файла и количество ‘\n’ в каждом блоке суммируется, чтобы найти общее число строк.
Код предполагает, что все строки, включая последнюю, заканчиваются символом новой строки также как wc -l утилита (принято на POSIX, иначе например, подумайте что будет, если вызвать cat *.txt ). Если последний символ не новая строка, последняя строка не считается (руками единицу добавить можно в этом случае).
Имея count_lines() функцию, легко получить желаемый вывод:
Если проникнуться дзеном пайтона:
На мой взгляд это то, что вам нужно, в легко понятном виде.
![]()
![]()
Вывести количество строк с помощью регулярного выражения. Особенность. Если последняя строка не пустая, то выведет количество на 1 элемент меньше.
На больших файлах ко всему файлу сразу применять не желательно, возможно проверить на пустые строки построчно или прочитав часть файла, потом сложив длину.
пример текстового файла
Как это работает. В данном случае жадность регулярного выражения отключена.
Жадность включена, из-за жадности регулярных выражений \n\n будут вместе там где ничего нет кроме переноса
Если посчитаем стандартно, то получим включая пустые строки, что пустая строка тоже строка. Этот метод считает всегда количество строк как мы это понимаем.
Причина по которой отличается количество
видна здесь, в конце нет переноса строки который считаем.
Вариант исправления количества строк для регулярных выражений, файл придется читать второй раз с конца.
Если символа переноса в последней строке нет, то прибавить плюс 1, в данном случае просто вывод на экран.
Алтернативное решение этой же проблемы чтение файла с начала построчно, далее взять последнюю строку и проверить в ней символ