如何从输入文本文件的每一行到输出文本文件上的对应行获取唯一单词的打印频率?

2024-07-03 05:52:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个家庭作业问题。我应该编写一个名为“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})

如何让计数器跳过一行并为下一行(从输入文件的下一行)打印唯一单词的频率?在


Tags: 文件函数counterblueredopen单词one
1条回答
网友
1楼 · 发布于 2024-07-03 05:52:51

正如评论中指出的,您只阅读过一行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')

结果:

^{pr2}$

相关问题 更多 >