Поиск количества заглавных слов в текстовом файле Python - PullRequest
0 голосов
/ 02 ноября 2019

Мне нужна помощь в сортировке текстового файла

Я пробовал несколько вариантов цикла for. Я также попытался убрать все пробелы и посчитать буквы по отдельности в файле. Я также пробовал несколько вариантов функции strip и различные операторы if

for character in file:
    if character.isupper():
        capital += 1
        file.readline().rstrip()
        break

print(capital)

Я ожидаю, что программа прочитает каждое слово или букву в документе и выдаст общее количество прописных слов, содержащихся в нем.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2019

Если целью является подсчет слов, начинающихся с заглавных букв, то я бы использовал тот факт, что логическое значение является подтипом целого числа:

with open('my_textfile.txt', 'r') as text:
    print(sum(word.istitle() for row in text for word in row))
0 голосов
/ 02 ноября 2019

Допустим, у нас есть файл примера 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 
0 голосов
/ 02 ноября 2019

Две вещи:

  1. Убедитесь, что вы перебираете символы, а не слова или предложения. Поместите некоторые операторы печати для проверки.
  2. Удалите оператор break из вашего блока if. Это немедленно выходит из цикла for и приведет к тому, что вы будете считать только 1.
for sentence in file:
    for char in sentence:
        if char.isupper():
            capital += 1

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