Как узнать количество символов в файле python
Перейти к содержимому

Как узнать количество символов в файле python

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

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

Алгоритм решения задачи:

Цикл for на каждой итерации извлекает из файла очередную строку. В теле цикла происходят следующие действия:

  1. Счетчик строк увеличивается на 1.
  2. Строка разбивается на слова с помощью метода split . Функция len считает количество слов в получившемся списке слов. Это количество добавляется к счетчику слов.
  3. Чтобы не учитывать символ перехода на новую строку ( ‘\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:

Regex Test

Проверьте вывод. Я просто протестировал его.

Это, вероятно, подсчет новых символов строки. Вычитайте символы с помощью (строк + 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 .

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

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