从文本文件中拆分字符

时间:2014-12-09 16:19:59

标签: python python-2.7

def get_word_frequencies(filename):
    freqs = {}
    for line in open(filename):
        for char in line.split():
            if char in freqs:
                freqs[char] += 1
            else:
                freqs[char] = 1
  return freqs

我遇到了从文本文件中拆分字符并找到其频率的问题。我写了这段代码,但它只找到了单词。我想要A-Z字典中的字母。

2 个答案:

答案 0 :(得分:2)

如果您想单独迭代字母,则无需split。字符串可以直接迭代。

for char in line:

...虽然,这也会计算空白,如" &#34 ;.如果你只想要字母,你可以遍历单词,然后遍历单词中的每个字符。

for word in line.split():
    for char in word:

顺便提一下,Python已经有一个Counter类,所以你不一定需要手动构建一个频率字典。

>>> import collections
>>> print collections.Counter("hello how are you doing today?")
Counter({' ': 5, 'o': 5, 'a': 2, 'e': 2, 'd': 2, 'h': 2, 'l': 2, 'y': 2, 'g': 1, 'i': 1, 'n': 1, 'r': 1, 'u': 1, 't': 1, 'w': 1, '?': 1})

答案 1 :(得分:1)

您可以使用collections.Counterstring.ascii_letters来计算您的信件数量。 string.ascii_letters的使用将允许您只计算字母,而不是标点符号等。

from collections import Counter
from string import ascii_letters

def get_word_frequencies(filename):
    with open(filename) as f:
        c = Counter(f.read())
    return {k:v for k,v in c.items() if k in ascii_letters}

c = get_word_frequencies('derp.py')

print(c)
# {'o': 12, 'h': 1, 'C': 2, 't': 16, 'i': 18, 'y': 1, 'u': 5, 'f': 11, 'p': 6, 
# 'v': 2, 'c': 10, 'm': 7, 'n': 13, 'k': 3, 'd': 5, 'a': 6, 'q': 2, 'w': 3, 
# 's': 10, 'g': 3, 'r': 19, 'l': 6, 'e': 25}