计算文本文件中字母的频率[关闭]


问题内容

从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。

8年前关闭。

在python中,如何遍历文本文件并计算每个字母的出现次数?我意识到我可以只使用“ for x in
file”语句来处理它,然后设置26个左右的ifif语句,但是肯定有更好的方法吗?

谢谢。


问题答案:

用途collections.Counter()

from collections import Counter
with open(file) as f:
    c = Counter()
    for line in f:
        c += Counter(line)

如果文件不是很大,则可以将所有文件作为字符串读取到内存中,并通过Counter一行代码将其转换为对象:

c = Counter(f.read())

例:

>>> c = Counter()
>>> c += Counter('aaabbbcccddd eee fff ggg')
>>> c
Counter({'a': 3, ' ': 3, 'c': 3, 'b': 3, 'e': 3, 'd': 3, 'g': 3, 'f': 3})
>>> c += Counter('aaabbbccc')
Counter({'a': 6, 'c': 6, 'b': 6, ' ': 3, 'e': 3, 'd': 3, 'g': 3, 'f': 3})

或使用count()字符串方法:

from string import ascii_lowercase     # ascii_lowercase =='abcdefghijklmnopqrstuvwxyz'
with open(file) as f:
    text = f.read().strip()
    dic = {}
    for x in ascii_lowercase:
        dic[x] = text.count(x)