Python基本程序来计算文件中的字母

时间:2016-07-02 10:01:21

标签: python python-2.7

我正在用Python编写一个用于在线课程的程序,以便找到文件中字母的频率。事情是我不断在最终结果中包含空格。我怎么能省略它们?这是我的代码:

import string
name = raw_input('Enter a file name: ')
fhandle = open(name)
counts = dict()
for line in fhandle:
    line = line.strip()
    line = line.translate(None,string.punctuation)
    line = line.lower()
    letters = list(line)
    for letter in letters:
        counts[letter]=counts.get(letter,0)+1
 lst = list()
    for letter,count in counts.items():
        lst.append((count,letter))
lst.sort(reverse=True)
for count,letter in lst:
    print count,letter

3 个答案:

答案 0 :(得分:4)

string.punctuation包含!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~且没有空格字符。

您应该将对translate()的通话更改为以下内容:

line.translate(None,string.punctuation+string.whitespace+string.digits)

在python解释器中键入help(string)以获取更多信息。

答案 1 :(得分:0)

如果您不想打印该字母(如果它是空格)(并且您不想更改代码中的任何其他内容),那么您可以在最后一个for循环中添加一个if语句:

for count,letter in lst:
    if letter != ' ':
        print count,letter

答案 2 :(得分:0)

这样做的一个优雅方法就是使用isalpha()。 见第11行:

import string
name = raw_input('Enter a file name: ')
fhandle = open(name)
counts = dict()
for line in fhandle:
    line = line.strip()
    line = line.translate(None,string.punctuation)
    line = line.lower()
    letters = list(line)
    for letter in letters:
        if letter.isalpha() == True:
            counts[letter]=counts.get(letter,0)+1
    lst = list()
    for letter,count in counts.items():
        lst.append((count,letter))
lst.sort(reverse=True)
for count,letter in lst:
    print count,letter