我正在用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
答案 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