计算所有字母的频率数

时间:2017-10-27 05:25:49

标签: python

我尝试计算每个字母的频率数

这是我的主要文件:

from moduleA import get_text, process_data,print_output
import os

filename1 = os.path.join(os.getcwd(),'script01.txt') 
filename2 = os.path.join(os.getcwd(),'script02.txt') 
myList1 = get_text(filename1)
myList2 = get_text(filename2)


data01=process_data(myList1)
data02=process_data(myList2)


print_output(data01)
print_output(data02)

这是moduleA文件:

def get_text(file_name):
text = None
try:
    with open(file_name) as f:
        text = f.read()
except IOError as io:
    print(str(io))
return text

def process_data(text_data):
from string import ascii_lowercase
data = {}
for char in text_data:
    ch = char.lower()
    if ch in ascii_lowercase:
        if ch not in data:
            data[ch] = 1
        else:
            data[ch] += 1  
return(data)

def print_output(data):
     for char in sorted(data.items()):
     print(str(char), str(data[char]))

这是我得到的错误:

 print(str(char), str(data[char]))
 KeyError: ('a', 867)

我不知道为什么我没有得到整本字典,只有第一行

2 个答案:

答案 0 :(得分:2)

是的,或者您可以使用collections Counter

from collections import Counter

frequencies = Counter(text)

对于打印,您必须按排序顺序迭代键:

def print_output(frequencies):
     for key in sorted(frequencies.keys()):
         print(key, frequencies[key])

答案 1 :(得分:2)

您可以像这样构建字典

    if ch in ascii_lowercase:
        if ch not in data:
            data[ch] = 1
        else:
            data[ch] += 1  

所以我想象键是字符,值是字符的计数:

{'a':867, 'b':233, ....}

dict.items()生成(键,值)对作为元组 - 如('a', 867)

def print_output(data):
    for char in sorted(data.items()):
        #print(char)
        print(str(char), str(data[char]))

char中的for char in sorted(data.items()): 是(' a',867),您正试图将其用作{{1}的密钥}导致KeyError

尝试

str(data[char])

def print_output(data):
     for char, count in sorted(data.items()):
         print(str(char), str(count))