2016-09-25 42 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 
})