文件在工作目录中但仍然报FileNotFoundError

0 投票
1 回答
3134 浏览
提问于 2025-04-18 09:14

我正在使用 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)

当我运行这个代码时,无论我把文件放在哪里,我总是会收到以下的错误信息:

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)

这样就能正常工作了,但它不会显示包含数字的行。(我该怎么做才能让它包含这些行呢?)最后,我还得修改我的代码,让用户输入他们想要读取的文件名,但只读取文件的前五行,如果行数少于五行,就显示所有行。这是因为我不能简单地输入文件名(“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()

这给了我以下的错误信息:

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

我为什么会收到这个错误?(我还注意到它在每个已经存在的“\”旁边多加了一个 - 错误信息里有四个“\”,而我只输入了两个。)

总结一下: (1.) "FileNotFoundError" 对于 "names.txt". (2.) 如何让 "readline()" 方法识别数字(整数/浮点数)。 (3.) 当用户输入要查找的文件时出现 "Invalid Argument" 错误信息。 (4.) 为什么最后这个问题[错误信息]显示的 "\\" 字符比我实际输入的多了一倍。

1 个回答

1
  1. 当你使用 open 函数,并且提供了一个相对路径(比如 "cat.txt"),Python 会从你在终端启动解释器时所在的当前工作目录读取文件。确保你在正确的路径下哦。

  2. 如果你想把字符串转换成数字,可以用 int() 或者 float()。使用 float() 更安全,因为如果你用 int("1.1"),会报错。

  3. 前面加个 r 的写法只在你提供字符串字面量时有效,比如 r"123" 这样是可以的。如果你写成 "r" + string,那只是把字符 r 加到字符串的开头。稍后会解释为什么 r 可以让打开文件的操作正常工作。你不需要在字符串周围加引号,因为那样会让路径变得无效。在终端中看到字符串周围有引号,是因为 Python 想告诉你这确实是一个字符串。

  4. \\ 显示出来是为了代替 \,因为 \ 是一个特殊的控制字符,用于转义序列,比如 \n(换行)和 \t(制表符)。如果你想得到一个普通的反斜杠字符,就要用 \\。这也是为什么当你使用 r 标志时,打开文件的操作能够正常进行,因为它会把字符串当作普通字符串处理。

撰写回答