Как заставить 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:~$