Как заставить Counter печатать частоту уникальных слов из каждой строки входного текстового файла в соответствующую строку выходного текстового файла?

У меня есть домашнее задание. Я должен написать функцию "WordsByLine", которая должна подсчитывать частоту уникальных слов на строку в файле и печатать частоту уникальных слов в соответствующую строку в выходном файле. Мой профессор рассказал нам, как должен выглядеть результат. Например, если во входном текстовом файле написано:

one fish two fish red fish blue fish

(одна рыба - две рыбы - первая строка. красная рыба - синяя рыба - вторая строка.)

Вывод должен выглядеть так:

two:1 one:1 fish:2 red:1 blue:1 fish:2

Первая строка в выходных данных - это частота уникальных слов для первой строки, а затем то же самое для второй строки.

Вот мой код:

def wordsByLine(inFile, outFile):
    from collections import Counter
    outFile = open(outFile, 'w')
    with open(inFile, 'r') as f:
        freqs = Counter(f.readline().split())
    outFile.write(str(freqs))
    outFile.close()
print(wordsByLine('input.txt','output.txt'))

Но вот мой вывод в текстовом файле. Распечатывает только первую строку.

Counter({'two':1, 'one':1, 'fish':2})

Как мне заставить Counter пропустить строку и напечатать частоту уникальных слов для следующей строки (из следующей строки во входном файле)?

1 ответ

Решение

Как указано в комментариях, вы когда-либо читали только одну строку с f.readline, Кроме того, вы, вероятно, хотите отформатировать текст, а не распечатывать строковое представление Counter объект:

>>> from collections import Counter
>>> def words_by_line(infile, outfile):
...     with open(infile) as f1, open(outfile, 'w') as f2: 
...         for line in f1:
...             counts = Counter(line.split())
...             string_gen = ("{}:{}".format(k,v) for k,v in counts.items())
...             f2.write(" ".join(string_gen) + "\n")
... 
>>> words_by_line('input.txt','output.txt')

Результат:

(trusty)juan@localhost:~$ cat output.txt 
fish:2 two:1 one:1
fish:2 red:1 blue:1
(trusty)juan@localhost:~$ 
Другие вопросы по тегам