2016-09-25 64 views
0

我想从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) 
... 
+3

请花一些时间来阅读帮助页面,尤其是命名为部分[“可我在这里大概问什么题目?”(HTTP://计算器.com/help/on-topic)和[“我应该避免问什么类型的问题?”](http://stackoverflow.com/help/dont-ask)。更重要的是,请阅读[Stack Overflow问题清单](http://meta.stackexchange.com/q/156810/204922)。您可能还想了解[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 – idjaw

+6

看到您提出了几个问题,但尚未接受单一答案,您也可以从阅读[旅游]中受益。 – usr2564301

+0

好吧,对不起,我不会再问了 – mrobertini1239

回答

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 
})