Подсчет количества строк, слов и букв в текстовом файле
Данный вариант программы считает количество строк, слов и символов (с учетом пробелов) с помощью строковых методов.
Алгоритм решения задачи:
Цикл for на каждой итерации извлекает из файла очередную строку. В теле цикла происходят следующие действия:
- Счетчик строк увеличивается на 1.
- Строка разбивается на слова с помощью метода split . Функция len считает количество слов в получившемся списке слов. Это количество добавляется к счетчику слов.
- Чтобы не учитывать символ перехода на новую строку ( ‘\n’ ), удаляем его методом strip . Символьная длина оставшейся строки измеряется функцией len . Полученное значение добавляется к счетчику символов.
Текстовый файл:
Код программы:
Это более классический алгоритм решения задачи. Мы не используем функцию len и методы строки.
Строка перебирается посимвольно. В данном случае при подсчете символов не учитывается не только символ перехода на новую строку, также исключаются пробелы и символы табуляции.
Для подсчета количества слов вводится дополнительная переменная ( pos ), которая «показывает», находимся ли мы внутри слова или нет. Если встречается непробельный символ и до этого мы находились вне слова, значит началось новое слово. Счетчик слов следует увеличить на 1.
Найти количество символов в файле с помощью Python
Ниже моя программа, но количество отсчетов для символов без пробела неверно.
Количество слов верное и количество строк правильное.
Какая ошибка в том же цикле?
Я просмотрел сайт с несколькими ответами, и я смущен, потому что не изучил некоторые другие функции в Python. Как исправить код как простой и простой, как в цикле, который я сделал?
В то время как количество символов без пробела равно 35 и с пробелом 45.
Если возможно, я хочу найти количество символов без пробела. Даже если кто-то знает цикл для количества символов с достаточным пространством.
Суммируйте длину всех слов в строке:
является выражением генератора . Это по существу цикл в одной строке, который вырабатывает длину каждого слова. Мы корнем эти длины непосредственно sum :
Улучшенная версия
Эта версия использует enumerate , поэтому вы сохраняете две строки кода, сохраняя удобочитаемость:
открывает файл с обещанием закрыть его, как только вы покинете отступ.
Всегда хорошая практика закрывать файл после того, как вы его используете.
Помните, что каждая строка (кроме последней) имеет разделитель строк.
То есть «\ r\n» для Windows или «\n» для Linux и Mac.
Таким образом, ровно два символа добавляются в этом случае как 47, а не 45.
Хорошим способом преодоления этого может быть использование:
Чтобы подсчитать символы, вы должны считать каждое отдельное слово. Таким образом, у вас может быть другой цикл, который учитывает символы:
Это должно быть сделано. Список слов должен, вероятно, отображать символы новой строки справа, возможно, что-то вроде wordslist = line.rstrip().split() .
Это слишком долго для комментария.
Python 2 или 3? Потому что это действительно важно. В своем REPL выполните следующие действия:
А? Ответ лежит в Юникоде. Это ñ является «n» с сочетанием диакритики. Значение его 1 символа, но не 1 байт. Поэтому, если вы не работаете с простым текстом ASCII, лучше указать, для какой версии python предназначена функция подсчета символов.
Я нашел это решение очень простым и удобочитаемым:
Как это? Он использует регулярное выражение для соответствия всем символам без пробелов и возвращает количество совпадений внутри строки.
Выход
На приведенном ниже рисунке показано, как это протестировано в RegExr:

Проверьте вывод. Я просто протестировал его.
Это, вероятно, подсчет новых символов строки. Вычитайте символы с помощью (строк + 1)
Более питоновское решение, чем другие:
Другие ответы здесь делают вручную, что делает str.splitlines() . Нет причин изобретать велосипед.
Просто пропустите нежелательные символы при вызове len ,
или sum счетчик,
или постройте a str из wordlist и возьмите len ,
или sum символы в wordlist . Я думаю, что это самый быстрый.
У вас две проблемы. Один — это окончания строки, а другой — промежутки между ними.
Теперь есть много людей, которые опубликовали довольно хорошие ответы, но я считаю, что этот метод легче понять:
line.strip() удаляет конечные и ведущие пробелы. Затем я вычитаю количество пробелов из общей длины.
У вас есть правильный ответ — и ваш код полностью верен. То, что я думаю, это то, что проходит конец символа линии, который включает в себя ваш счетчик символов на два (в последней строке нет ни одной новой строки). Если вы хотите удалить это, простая выдумка будет заключаться в том, чтобы предлагать Loaf
См. ответ csl для второй части.
взять входные данные в качестве имени файла, т.е. files.txt из входного параметра, а затем подсчитать общее количество символов в файле и сохранить в переменную char
Здесь я получил самую маленькую программу с меньшим использованием памяти для вашей проблемы
Строки будут списком строк, поэтому длина строк — это не что иное, как количество строк. Следующие данные шага содержат строку содержимого вашего файла (каждое слово отделено пробелом), поэтому, если мы разделим данные, вы получите список слов в вашем файле. таким образом, длина этого списка дает количество слов. снова, если мы присоединимся к списку слов, вы получите все символы в виде одной строки. таким образом длина этого дает количество символов.
Python с абсолютного нуля. Учимся работать со строками, файлами и интернетом

Недавно мы провели опрос среди читателей и выяснили, что многие хотели бы изучить Python, причем начать с самого начала. В качестве эксперимента мы опубликовали статью «Python с абсолютного нуля. Учимся кодить без скучных книжек», где рассказали об азах Python: переменных, условиях, циклах и списках. Отклики были позитивными, и мы решили продолжить знакомить читателей с Python в нашем фирменном нескучном стиле.
Эта статья, как и предыдущая, доступна без платной подписки, так что смело делись этими ссылками с друзьями, которые мечтают выучить Python!
Начнем со строк. Чтобы решить вставшую перед друзьями проблему, Чебурашка использовал функцию replace( ) , которая заменяет в строке одну подстроку другой.
Сначала он объявил переменную s и поместил туда строку, которую прислал ему Гена.
Дальше Чебурашка определил словарь из слов, которые требовалось заменить.
И теперь при помощи цикла for Чебурашка перебрал словарь, чтобы заменить каждое из слов ( key ) на соответствующее значение из словаря ( slova[ key] ):
Словари во многом похожи на списки, но значения в них записаны парами: ключ и значение. По ключу можно узнать значение. Можно считать, что в списках ключи — это индексы (0, 1, 2. ), а в словарях — строки.
Функцию replace( ) удобно использовать, чтобы начисто удалить какие‑то слова из строки. Для этого будем заменять их пустой строкой (если открыть и закрыть кавычку, то получится пустая строка):
Чтобы записать в переменную несколько строк, можно обернуть их в три одинарные кавычки и делать переносы прямо в коде.
Чтобы получить количество символов в строке, используется функция len().
И, как я уже рассказывал в прошлой статье, от строк можно брать срезы как от массивов, если указать начало и конец подстроки в квадратных скобках после переменной. Позиция начинается с нуля.
Если нужно сделать срез с начала строки, первую цифру можно не писать.
Предположим, тебе нужно найти в списке строки, которые начинаются на https. Перебираем их с помощью for , для каждой проверяем, совпадают ли первые пять знаков со строкой https , и если да, то выводим строку:
Чтобы посчитать количество вхождений подстроки в строку, можно использовать метод . count( ) :
Иногда в начале или в конце строки могут быть лишние пробелы или переносы строк. Давай удалим их специальной командой . strip( ) :
Переносы строк можно добавить с помощью символов \ n (используется во всех ОС) либо \ r\ n (в Windows). Есть и другие спецсимволы. Например, \ t — знак табуляции.
Чтобы определить наличие подстроки в строке s, можно использовать метод . find( ) :
Если искомая подстрока найдена, то в переменную n попадет ее позиция в строке, а если не найдена, n станет равной -1 .
Давай попробуем определить, есть ли в строке адрес электронной почты с Xakep.ru, то есть будем искать подстроку @xakep. ru .
Но сначала нам понадобится еще один строковый метод — . split( ) . Он позволяет разделить строку на части, указав в качестве аргумента строку‑разделитель. Например, s. split( ‘\ n’) разделит текст на абзацы по символу переноса строки. Если же оставить скобки пустыми, то будет использован разделитель по умолчанию — пробел.
Метод . join( ) позволяет, наоборот, склеивать строки. Он принимает список и возвращает строку, где каждый элемент списка соединен с другим через строку, у которой ты вызвал этот метод.
Форматируем строки
Мы не раз печатали разные вещи, соединяя строки простым сложением. Это не всегда удобно, особенно учитывая, что если попадутся числа, то их придется переводить в строки функцией str( ) . Есть более красивый и удобный способ подставлять значения переменных внутрь строк. Точнее, два немного разных способа.
Способ 1 — c помощью метода .format()
Мы можем вставить в строку парные фигурные скобки, а затем вызвать строковый метод . format( ) и передать ему нужные значения в порядке их подстановки в строку.
Можно передать информацию списком через звездочку:
Способ 2 — через f-строки
Другой вариант — написать букву f перед строкой и затем в фигурных скобках указывать непосредственно переменные.
Главное преимущество этого способа в том, что ты можешь вставить значение в строку несколько раз. К тому же можно менять значения прямо в фигурных скобках: сперва Python выполнит все действия в них, а затем подставит полученный результат в строку. Так, метод . upper( ) в примере выше делает все буквы заглавными.
Файлы
Перечисленных методов достаточно, чтобы ты мог делать со строками что угодно. Но откуда эти строки возьмутся? Чаще всего они записаны в файлах, поэтому сейчас я расскажу, как в Python с ними управляться.
Чтобы работать с файлом, его нужно открыть. Для этого служит функция open( ) , а работает она вот так:
Режимов работы с файлами несколько, но тебя интересует в основном:
- r — открыть файл для чтения из него информации;
- w — открыть файл для записи в него информации (создает новый файл);
- a — открыть файл для дозаписи информации в конец файла (дописывает информацию в конец существующего файла);
- a+ — дозапись и чтение.
Чтобы избежать проблем с путями в Windows, используй в них двойной слеш \ \ , а также перед открывающей кавычкой пути файла ставь букву u, указывающую на то, что строка в кодировке Unicode:
Читать строки из файла можно методом . read( ) :
Как вариант — можно последовательно читать из файла отдельные строки с помощью цикла for :
После того как работа с файлом закончена, нужно закрыть его.
Для работы с бинарными файлами при открытии файла добавь к режиму букву b :
Подробнее о бинарных данных мы поговорим в одной из следующих статей.
Давай теперь попробуем создать новый текстовый файл в одном каталоге с нашим скриптом и записать в него значения каких‑то переменных.
Обрати внимание, что в конце каждой строки стоит символ \ n — переход на новую строку.
Допустим, ты хочешь дописать третью строчку в конец этого файла. Тут‑то и пригодится режим дозаписи!
Для открытия файлов также очень удобно использовать конструкцию with open( ‘имя файла с путем и расширением’, ‘режим работы с файлом’) as f , потому что благодаря слову with файл закроется автоматически и тебе не придется думать об этом.
Работа с вебом
Давай научимся получать информацию с веб‑страниц. Для начала нужно установить несколько модулей. Пишем в командной строке:
Модуль requests позволяет делать GET- и POST-запросы к веб‑страницам. Модуль html2text служит для преобразования HTML-кода веб‑страниц в обычный текст, то есть чистит его от тегов HTML.
Импортируем наши новые модули в начале программы и попробуем получить какую‑нибудь страницу из интернета.
Программа напечатает много HTML-кода, из которого состоит главная страница журнала. Но что, если тебе нужен только текст сайта, а не мешанина из тегов? Здесь поможет html2text. Он выделит из кода текст, заголовки и картинки и отдаст их уже без HTML-тегов.
Кроме GET-запросов, существуют так называемые POST-запросы, которые применяются для отсылки на сервер больших текстов или каких‑то файлов. Если видишь на сайте форму, особенно с загрузкой файла, значит, скорее всего, при нажатии на кнопку «Отправить» будет сделан POST-запрос.
Библиотека requests тоже позволяет делать POST-запросы. Тебе это может пригодиться для имитации действий пользователя — например, если нужно автоматизировать работу с сайтом. Можешь даже использовать это в качестве самописного аналога Burp!
Давай посмотрим, как послать обычный POST-запрос. Предположим, на сайте site. ru существует скрипт guest. php , который POST-запросом принимает от формы имя пользователя name и сообщение message , а затем постит их в гостевую книгу.
Теперь давай отправим запрос с файлом payload. php во вложении и теми же двумя полями формы, что и в предыдущем запросе. Файл придет на сервер под именем misc. php .