@MilkaBin

Как считать файл и разбить текст на списки строк?

Здравствуйте!

Долго не могу разобраться с вот таким вопросом:
при решении задачи, где нужно посчитать количество строк в тексте, в которых встречается определённое слово, столкнулась с тем, что не могу разбить текст на списки строк.
Есть файл с текстом в формате txt: содержимое файла:

text = """Hello everyone, welcome to the party! I said hello to my friend hello when I saw her in the park. Hello, how are you today? I hope everything is going well. She waved and said hello with a big smile on her face. After a warm hello, we started talking about our plans for the weekend."""

Программа должна вывести ответ 3, так как в трех строках встречается слово 'hello'.
В первой строке, во второй и в третьей. Но моя программа выводит 1, так как все содержимое файла считывает в одну строку.

функция подсчета слов:

from typing import TextIO

def count_articles(stream: TextIO, topic: str = "hello") -> int:
    topic = topic.lower()  
    article_count = 0
    
    for line in stream:
        line = line.lower()  
        words = line.split()  
        
        if topic in words:
            topic_article_count += 1  
    
    return topic_article_count

with open('hello.txt', 'w') as file:
    file.write("Hello everyone, welcome to the party! I said hello to my friend  hello when I saw her in the park. Hello, how are you today? I hope everything is going well. She waved and said hello with a big smile on her face. After a warm hello, we started talking about our plans for the weekend.")

with open('hello.txt', 'r') as file:
    count = count_articles(file, topic="hello")
    print(count)


А нужно, чтобы каждая строка, считывалась в отдельный список:

[Hello everyone, welcome to the party! I said hello to my friend hello when I saw ]
[her in the park. Hello, how are you today? I hope everything is going well. She waved and]
[said hello with a big smile on her face. After a warm hello, we started talking about our]
[plans for the weekend.]

Подскажите, как это реализовать? Заранее Спасибо!
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Так файл самостоятельно надо сформировать, или он уже сформирован?
И что считается строкой? Одно предложение? Или как в конце вопроса?
Самый простой вариант - вставь в записываемую строку символ перевода строки (\n) в нужных местах.
Например, f.write('foo\nbar\nbaz) даст
foo
bar
baz
Ответ написан
Комментировать
shabelski89
@shabelski89
engineer
def read_file(filename: str) -> str:
    with open(filename, 'r') as file:
        text = file.read()
    return text


def count_articles(text: str, articles: str) -> int:
    text_as_list = text.lower().split()
    counter = 0
    for word in text_as_list:
        if word == articles.lower():
            counter += 1
    return counter


if __name__ == "__main__":
    test_str = "Hello everyone, welcome to the party! I said hello to my friend  hello when I saw her in the park. Hello, how are you today? I hope everything is going well. She waved and said hello with a big smile on her face. After a warm hello, we started talking about our plans for the weekend."
    test_word = 'Hello'
    count = count_articles(test_str, test_word)
    print(f'Word "{test_word}" count = {count} !')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы