Python open()给出IOError:Errno 2没有这样的文件或目录

Python open() gives IOError: Errno 2 No such file or directory

出于某种原因,我的代码在打开简单文件时遇到问题:

这是代码:

1
file1 = open('recentlyUpdated.yaml')

错误是:

1
IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • 当然,我检查了一下这是文件的正确名称。
  • 我试着在文件周围移动,给open()文件的完整路径,但似乎没有任何一个工作。

  • 确保文件存在:使用os.listdir()查看当前工作目录中的文件列表
  • 确保您位于您认为与os.getcwd()在一起的目录中(如果您从IDE启动代码,则很可能位于其他目录中)。
  • 然后您可以:
    • 调用os.chdir(dir)dir是文件所在的文件夹。找到了,然后像打开文件一样打开文件名。
    • open调用中指定文件的绝对路径。
  • 如果路径使用反斜杠,请记住使用原始字符串,例如那么:dir = r'C:\Python32'
    • 如果不使用原始字符串,则必须避开每个反斜杠:'C:\\User\\Bob\\...'
    • 前斜杠也适用于windows 'C:/Python32',不需要逃跑。

让我澄清一下python如何查找文件:

  • 绝对路径是以计算机的根目录开始的路径,例如,如果您在Windows上,则为"c:pythonscripts.."。
  • 相对路径不是从计算机的根目录开始的路径,而是相对于称为working directory的东西。您可以通过调用os.getcwd()来查看python当前的工作目录。

如果尝试执行open('sortedLists.yaml'),python将看到您正在传递一个相对路径,因此它将搜索当前工作目录中的文件。调用os.chdir将更改当前工作目录。

例:假设file.txt是在C:\Folder中发现的。

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

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

1
open(r'C:\Folder\file.txt') #full path


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

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

尝试如下:

1
2
file1 = open(r'Drive:\Dir
ecentlyUpdated.yaml'
)


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

常见的误解是相对路径与Python脚本的位置相关,但这是不真实的。相对文件路径总是相对于当前工作目录,并且当前工作目录不必是Python脚本的位置。

您有三种选择:

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

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

    1
    2
    3
    4
    5
    from pathlib import Path

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

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

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

    1
    2
    3
    4
    import os

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

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

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

    1
    2
    3
    4
    5
    path = 'C:\Users
    ewton\file.yaml'

    # Incorrect! The '
    ' in 'Users
    ewton' is a line break character!

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

    1
    2
    3
    path = r'C:\Users
    ewton\file.yaml'

    # Correct!

    (另请参见:python中的windows路径)

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

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