文件位于工作目录中时的FileNotFoundError

时间:2014-06-10 03:27:30

标签: python file

我正在使用Python 3.4

这是我的代码:

fileObject = open("names.txt", "r")
counter  = 0

for line in fileObject:
    fileObject.readline()
    counter = counter + 1

print("The number of lines is: ", counter)

当我运行它时,无论我放置文件的位置,我都会重复收到以下Traceback错误:

FileNotFoundError: [Errno 2] No such file or directory: 'names.txt'

我在本书中找到的唯一可能相关信息(我目前正在参加Python课程)如下:

  

如果open函数收到不包含路径的文件名,则假定该文件与程序位于同一目录中。

但是我把文件放在哪里并不重要,这不会起作用。虽然,当我使用字母r"作为路径文字的前缀时,如下所示:

fileObject = open(r"C:\Python34\names.txt", "r")
counter  = 0

for line in fileObject:
    fileObject.readline()
    counter = counter + 1

print("The number of lines is: ", counter)

然后,它会起作用,但不会显示包含数字的行。(如何使其包含这些?) 最后,我还必须更改我的代码以允许用户输入他们想要读取的文件,但只读取文件的前5行,如果小于将显示所有行。它遵循(这与我不能简单地键入名称(" names.txt")来搜索文件):

fileName = input("Enter the location of the file: ")
fileObject = open("r" + "\"" + fileName + "\"", "r")

for counter in range(5):
    while fileObject != "":
        file = fileObject.readline()
        print(file)

fileObject.close()

它给出了以下Traceback错误:

OSError: [Errno 22] Invalid argument: 'r"C:\\Python34\\names.txt"'

我为什么收到这个? (我还注意到它增加了额外的" \"在每个已经存在的旁边 - 错误消息包含4" \"而我只输入2。)

总结: (1.)"FileNotFoundError" for "names.txt". (2.)如何使"readline()"方法识别数字(int' s / float' s)。 (3.)"Invalid Argument"用户输入要搜索的文件时的回溯。 (4.)为什么最后一个问题[错误消息]显示的"\\"字符加倍,而不是实际输入的字符。

1 个答案:

答案 0 :(得分:1)

  1. 使用open时,提供了相对路径(如"cat.txt"),Python从当前工作目录中读取,这是您在终端中启动解释器的位置。确保你的路径正确。

  2. 要将字符串解析为数字,请使用int()float()float()它会更安全,因为int("1.1")会抛出错误

  3. r前缀仅在您提供字符串文字时有效,例如r"123"将起作用。执行"r" + string只会将字符r添加到字符串的开头。更多关于为什么r稍后打开文件的原因。您不需要在字符串周围添加引号,因为这会使路径无效。你只看到终端中字符串的引号,因为Python想要告诉你字符串是一个字符串。

  4. 显示
  5. \\而不是\,因为\是用于转义序列的特殊控制字符,例如\n和{{1} },仅使用反斜杠字符\t。这也是当您使用\\标志时打开文件的原因,该标志将字符串视为