如何让Counter将输入文本文件的每一行中的唯一单词的频率打印到输出文本文件中的相应行?

时间:2016-11-20 18:43:27

标签: python counter python-3.4 frequency word-frequency

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

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

1 个答案:

答案 0 :(得分:0)

正如评论中所指出的那样,您只能阅读 $xpath = new DOMXPath($dom); $myElem = $xpath->query("//*[contains(@class, '$classname')]"); foreach($myElem as $key => $value) { $result[] = $value->nodeValue; } 一行。此外,您可能希望格式化文本,而不是打印出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')
相关问题