如何计算每行的字母频率

时间:2016-09-25 12:20:44

标签: python

我想从txt文件中计算字母表字母的频率。不区分大写和小写字母,所以如果它是“b”或“B”则无关紧要。

我认为可以在def count_letters()中设置字母表列表      喜欢:alphabet =“abc ... xyz” 然后检查每一行的字母频率。

我有这段代码:

from tkinter import *
import tkinter.messagebox
from tkinter.filedialog import askopenfilename
import string

def show_result():
    analyze_file(filename.get())

def analyze_file(filename):
    try:
        infile = open(filename, "r")
        # ... create a list counts ...
        # ... for each line call count_letters ...
        infile.close()

    # show histogram
    histogram(counts)
     except IOError:
    tkinter.messagebox.showwarning("Analyze File", 
                                "File " + filename + " does not exist")

  # count each letter in the string 
def count_letters(line, counts): 
    #code...
     pass

def open_file():
     filenameforReading = askopenfilename()
     filename.set(filenameforReading)
...

1 个答案:

答案 0 :(得分:3)

根据我的理解,collections.Counter是你所追求的。

from collections import Counter

def count_letters(line): 
    return Counter(line.lower())

假设line是一个字符串,这会将所有字母转换为小写字母,并返回一个类似字典的对象,其中包含所有字母的计数。 例如:

count_letters('Bananas are berries!')

将产生

Counter({
    'a': 4, 
    'e': 3, 
    'r': 3, 
    ' ': 2, 
    'b': 2, 
    'n': 2, 
    's': 2,  
    'i': 1, 
    '!': 1
})