Python 3.5.2 FileNotFoundError:[Errno 2]没有这样的文件或目录:' test.txt'

时间:2017-05-21 00:40:17

标签: python

以下是导致我的问题的代码示例:

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'

可能出现此错误的原因是什么?我该如何解决这个问题?

2 个答案:

答案 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]))