98

出于某种原因,我的代码无法打开一个简单的文件:

这是代码:

file1 = open('recentlyUpdated.yaml')

错误是:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • 当然,我检查了这是文件的正确名称。
  • 我试过移动文件,给出文件open()的完整路径,但似乎都不起作用。
4

6 回答 6

123
  • 确保文件存在:用于os.listdir()查看当前工作目录中的文件列表
  • 确保你在你认为你所在的目录中os.getcwd()(如果你从 IDE 启动你的代码,你很可能在不同的目录中)
  • 然后,您可以:
    • 调用os.chdir(dir)dir作为文件所在的文件夹,然后像以前一样使用文件名打开文件。
    • open在调用中指定文件的绝对路径。
  • 如果您的路径使用反斜杠,请记住使用原始字符串,如下所示:dir = r'C:\Python32'
    • 如果您不使用原始字符串,则必须转义每个反斜杠:'C:\\User\\Bob\\...'
    • 正斜杠也适用于 Windows 'C:/Python32',不需要转义。

让我澄清一下 Python 是如何查找文件的:

  • 绝对路径是以计算机的根目录开头的路径,例如,如果C:\Python\scripts您使用的是 Windows。
  • 相对路径是不以计算机的根目录开头的路径,而是相对于称为工作目录的东西的路径。你可以通过调用来查看 Python 的当前工作目录os.getcwd()

如果你尝试这样做open('sortedLists.yaml'),Python 会看到你传递给它一个相对路径,所以它会在当前工作目录中搜索文件。

调用os.chdir()将更改当前工作目录。

示例:假设file.txtC:\Folder.

要打开它,您可以执行以下操作:

os.chdir(r'C:\Folder')
open('file.txt') # relative path, looks inside the current working directory

或者

open(r'C:\Folder\file.txt') # absolute path
于 2012-08-30T17:03:23.360 回答
26

最有可能的问题是您使用相对文件路径来打开文件,但当前工作目录未设置为您认为的那样。

相对路径相对于 python 脚本的位置是一个常见的误解,但这是不正确的。相对文件路径总是相对于当前工作目录,并且当前工作目录不一定是你的 python 脚本的位置。

你有三个选择:

  • 使用绝对路径打开文件:

    file = open(r'C:\path\to\your\file.yaml')
    
  • 生成相对于您的 python 脚本的文件路径:

    from pathlib import Path
    
    script_location = Path(__file__).absolute().parent
    file_location = script_location / 'file.yaml'
    file = file_location.open()
    

    (另请参阅:如何获取当前正在执行的文件的路径和名称?

  • 在打开文件之前更改当前工作目录:

    import os
    
    os.chdir(r'C:\path\to\your\file')
    file = open('file.yaml')
    

其他可能导致“找不到文件”错误的常见错误包括:

  • 在文件路径中意外使用转义序列:

    path = 'C:\Users\newton\file.yaml'
    # Incorrect! The '\n' in 'Users\newton' is a line break character!
    

    为避免犯此错误,请记住对文件路径使用原始字符串文字:

    path = r'C:\Users\newton\file.yaml'
    # Correct!
    

    (另请参阅:Python 中的 Windows 路径

  • 忘记 Windows 不显示文件扩展名:

    由于 Windows 不显示已知的文件扩展名,因此有时当您认为您的文件名为file.yaml时,它实际上是名为file.yaml.yaml. 仔细检查文件的扩展名。

于 2018-09-08T22:39:52.963 回答
7

该文件可能存在,但可能具有不同的路径。尝试编写文件的绝对路径。

尝试os.listdir()使用函数来检查至少 python 是否可以看到该文件。

试试这样:

file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')
于 2012-08-30T17:07:30.347 回答
3

可能,您关闭了“file1”。
只需使用 'w' 标志,即创建新文件:

file1 = open('recentlyUpdated.yaml', 'w')

mode是一个可选字符串,它指定打开文件的模式。它默认为“r”,表示以文本模式打开以供阅读。其他常用值是 'w' 用于写入(如果文件已经存在,则截断文件)......

(另见https://docs.python.org/3/library/functions.html?highlight=open#open

于 2019-08-15T09:46:57.257 回答
2

如果是 VSCode,请查看工作区。如果您在其他工作区,此错误可能会上升

于 2020-05-28T11:56:03.627 回答
0

检查已经提到的路径,是绝对的还是相对的。

如果它类似于--> /folder/subfolder/file --> 计算机将在根目录中搜索文件夹。

如果它类似于--> ./folder/subfolder/file--> 计算机将在当前工作目录中搜索文件夹。

于 2021-07-03T20:08:53.923 回答