【问题标题】:Words, sorted by frequency, in a book (.txt file)书中的单词,按频率排序(.txt 文件)
【发布时间】:2023-03-21 09:59:01
【问题描述】:

我正在使用:

from collections import Counter
wordlist = open('mybook.txt','r').read().split()
c = Counter(wordlist)
print c

# result :
# Counter({'the': 9530, 'to': 5004, 'a': 4203, 'and': 4202, 'was': 4197, 'of': 3912, 'I': 2852, 'that': 2574, ... })

打印一本书的所有单词,按频率排序。

如何将此结果写入 .txt 输出文件?

g = open('wordfreq.txt','w')
g.write(c)   # here it fails 

这是所需的输出wordfreq.txt

9530
至,5004
一、5004
还有,4203
是,4197
...

【问题讨论】:

  • 你尝试做什么?你做过研究吗?我希望没有人回答这个问题,让你实际尝试一些东西。 SO 不是让某人免费为您编码的地方。您需要先尝试并研究如何做某事。
  • @JohnRuddell 如果你不觉得回答它,那么不要这样做。 我尝试了各种方法,包括尝试json.dumps dict 然后意识到这不仅是dict,而且是更复杂的事情……再说一次,如果您不喜欢这个问题,请不要回答,但我看不出您的评论有什么意义。
  • @Basj 几件事,首先我没有否决你的问题.. 但其他人有,因为你的问题没有试图解决这个问题。如果您有tried various things,请将它们发布在您的问题中。我们可以告诉你哪里出错了……除此之外,我可以做一个简单的谷歌搜索并轻松找到解决方案。在提出问题之前缺乏研究通常也会让你遭到很多反对
  • 您在谷歌搜索中的确切问题How to write this result in a .txt output file ?google search...first result...second result.谷歌搜索有多难?如果您尝试,答案就在那里。记住谷歌是你的朋友。不要直接转向 SO。
  • @JohnRuddell 感谢您的回答。我认为用json.dumps 粘贴我不成功的尝试确实会用噪音污染问题,并降低未来的可读性。好吧,我不会添加更多,如果没有人想回答,就是这样,句号。我认为这可能很有趣。你说不是,那好吧。

标签: python frequency words word-frequency


【解决方案1】:

如果你想以排序的方式编写它,你可以这样做。

from collections import Counter
wordlist = open('so.py', 'r').read().split()
word_counts = Counter(wordlist)

write_file = open('wordfreq.txt', 'w')
for w, c in sorted(word_counts.iteritems(), key=lambda x: x[1], reverse=True):
    write_file.write('{w}, {c}\n'.format(w=w, c=c))

【讨论】:

    【解决方案2】:

    我认为这可能是您需要的帮助:如何以您请求的格式打印字典。前四行是您的原始代码。

    from collections import Counter
    wordlist = open('so.py', 'r').read().split()
    c = Counter(wordlist)
    print c
    
    outfile = open('output.txt', 'w')
    for word, count in c.items():
        outline = word + ',' + str(count) + '\n'
        outfile.write(outline)
    

    【讨论】:

    • 谢谢!只是一件小事:如何按频率排序(count)?在print c,它被神奇地排序了! (我检查了三次)
    • 实际的答案是您在线搜索“按值排序python字典”。在发表评论之前,您怎么没有找到任何东西?
    【解决方案3】:

    我认为这可以更简单一点。我还使用了上下文管理器 (with) 来自动关闭文件

    from collections import Counter
    
    with open('mybook.txt', 'r') as mybook:
        wordcounts = Counter(mybook.read().split())
    
    with open('wordfreq.txt', 'w') as write_file:
        for item in word_counts.most_common():
            print('{}, {}'.format(*item), file=write_file)
    

    如果文件特别大,可以避免一次性全部读入内存

        wordcounts = Counter(x for line in mybook for x in line.split())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多