Что такое немодульный способ подсчета слов в файле? - PullRequest
0 голосов
/ 13 октября 2018

Что такое функциональный способ подсчета количества символов в файле?

Я хотел бы по возможности избегать использования каких-либо модулей.Из-за моих технических ограничений и требований требуется как можно больше оптимизации - и это включает в себя пропуск модулей, так как в моей ситуации они загружаются слишком долго (даже если время загрузки тривиально).Спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

Ну, это на самом деле довольно легко сделать.Сначала я расскажу о подсчете слов (который можно использовать с файлом или просто строкой, но для цели я буду подсчитывать слова в файле).

Давайте представим, что это содержимое нашего файлаourfile.txt:

Hello. This is a file.

Not the most exciting file.
Just be glad it isn't lorem ipsum.

Давайте начнем с определения нашей функции и чтения из нашего текстового файла:

def countWordsFile(file):
   with open(file) as f:
      query = file.read()

Отлично, теперь у нас есть содержимое файла!Далее мы собираемся определить новую переменную с именем n_split.Эта переменная будет разбивать строку на каждый \n.Но что происходит, когда у нас есть разрывы строк, это может генерировать пустые значения списка.Поэтому мы используем простую filter функцию для удаления пустых значений списка:

n_split = list(filter(None, query.split('\n'))) 
# Splits at every \n, and removes empty list values caused by line breaks

Когда мы удаляем все пустые элементы списка, n_split теперь выглядит так:

['Hello. This is a file.', 'Not the most exciting file.', 'Just be glad it isn't lorem ipsum.'] 

ДляДля сравнения, если бы мы не удалили пустые элементы списка, n_split выглядело бы так:

['Hello. This is a file.', '', 'Not the most exciting file.', 'Just be glad it isn't lorem ipsum.'] 

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

Теперь наша переменная n_split содержит каждый абзац в файле без каких-либо пустых элементов списка.Далее следует разделить каждый абзац на каждое отдельное слово.Чтобы сделать это, мы можем просто перебрать каждый элемент в n_split и разбить его на пробелы:

words = []
for i in n_split:
   words.append(i.split(' '))

Но у нас еще есть последний шаг.Понимаете, поскольку мы разделяем каждый элемент списка, который уже находится внутри списка, теперь у нас фактически есть список, который содержит отдельные списки каждого слова для каждого абзаца.Поэтому мы просто должны объединить их в один большой список.Для этого мы можем использовать простое выражение понимания списка ( credit ).Мы можем найти len этого сгенерированного списка и просто return it:

return len([x for y in words for x in y])

И теперь мы можем получить доступ к этому значению в любое время, просто вызвав print(countWordsFile('ourfile.txt')) и получив вывод:

17

Точное количество слов в файле!Мы достигли нашей цели.На самом деле очень просто получить количество символов в строке: просто наберите len(string).Использование len является обоюдоострым мечом: оно может возвращать длину списка или длину строки.В заключение, я считаю, что это очень простой и надежный способ подсчета символов или слов в строке или из файла.Я надеюсь, что вы узнали что-то из этого руководства!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...