以下是导致我的问题的代码示例:
import string
letters = string.ascii_lowercase
offset = ord('a')
def countFrequency(file_handle):
"""Traverse a file and compute the number of occurences of each letter
return results as a simple 26 element list of integers."""
results = [0] * len(letters)
for line in file_handle: #read line from file
for char in line: #read char by char from above line
char = char.lower() #cnverting char in lowercase
if char in letters: #checking if char exist i letters
results[ord(char) - offset] += 1
return results
#sorting the both lists frequency and letter list
def sort(ltr,frequency):
for x in xrange(len(frequency)):
for y in xrange(len(frequency)-1):
if frequency[y]<frequency[y+1]: # on true swap values
t=frequency[y+1]
frequency[y+1]=frequency[y]
frequency[y]=t
t=ltr[y+1]
ltr[y+1]=ltr[y]
ltr[y]=t
#print the sorted results
for i in xrange(len(ltr)):
if(frequency[i]==0):
break;
print "%s=%d" % (ltr[i], frequency[i])
if __name__ == "__main__":
filename = str(input('Enter file name(e.g. test.txt):'))
#file path
sourcedata = open(filename)
#fucntion return frequency of letters
frequency = countFrequency(sourcedata)
#creating list of letters (a-z)
ltrs= [0] * len(letters)
for i in xrange(len(frequency)):
ltrs[i]=chr(i + ord('a'))
#sorting the result in descending order
sort(ltrs,frequency)
我应该编写一个提示输入文件名的Python程序。程序应该打开命名文件并计算其中每个字母的频率,忽略大小写。结果表应按排序顺序输出到屏幕。按“排序顺序”我的意思是应该首先显示最常用的字母,然后是第二个最常用的字母,依此类推。 这是我到目前为止所得到的,但当我尝试运行它并输入我收到的文件名时:
sourcedata = open(filename) #file path
FileNotFoundError: [Errno 2] No such file or directory: 'filename'
可能出现此错误的原因是什么?我该如何解决这个问题?
答案 0 :(得分:0)
如果您使用完整正确的路径,可以尝试:
import os
filename = input('Enter file name(e.g. test.txt):')
filename = os.path.join(filename)
sourcedata = open(filename)
此外,如果您实际使用的是Python 3+,print "%s=%d" % (ltr[i], frequency[i])
将无效;它应该是:
print('{}={}'.format(ltr[i], frequency[i]))
答案 1 :(得分:0)
使用绝对路径(使用/Path/to/your/file.txt而不是file.txt)。 使用绝对路径比使用相对路径要好得多,因为不会获取FileNotFoundError,将在Python 2和Python 3中工作。 正如@Trenton_m所说,
print "%s=%d" % (ltr[i], frequency[i])
在python 3中不起作用。您应该使用:
print('{}={}'.format(ltr[i], frequency[i]))