Допустим, у нас есть файл примера doc.txt
с таким содержанием:
Это тестовый файл для определения заглавных слов. Я создал это в качестве примера, потому что требования вопроса могут отличаться. Например, должны ли такие аббревиатуры, как SQL, считаться заглавными? Если нет: это должно привести к восьми заглавным словам. Если да: это должно привести к девяти.
Если вы хотите посчитать заглавные (так называемый регистр) слова, но исключить все заглавные слова, такие как аббревиатуры, вы можете сделать что-то вроде этого:
def count_capital_words(filename):
count = 0
with open(filename, 'r') as fp:
for line in fp:
for word in line.split():
if word.istitle():
print(word)
count += 1
return count
print(count_capital_words('doc.txt')) # 8
Если нужно подсчитать все заглавные слова, вы можете изменить функцию так, чтобы она проверяла только первую букву слова. Обратите внимание, что функция filter(None, ...)
гарантирует, что word
никогда не будет пустой строкой, избегая IndexError
, которое будет выброшено в следующих случаях:
def count_capital_words(filename):
count = 0
with open(filename, 'r') as fp:
for line in fp:
for word in filter(None, line.split()):
if word[0].isupper():
count += 1
return count
print(count_capital_words('doc.txt')) # 9
Если у вас более сложные требования, вы можете получитьитерация таких слов:
from itertools import chain
def get_words(filename):
with open(filename, 'r') as fp:
words = chain.from_iterable(line.split() for line in fp)
yield from words