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

2024-04-18 21:45:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是代码:

file1 = open('recentlyUpdated.yaml')

错误是:

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

Tags: or文件no代码yaml错误原因open
3条回答

最有可能的问题是,您正在使用relative file path打开文件,但是current working directory没有设置为您认为的值。

相对路径是相对于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()
    

    (另请参见:How do I get the path and name of the file that is currently executing?

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

    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!
    

    要避免犯此错误,请记住对文件路径使用raw string literals

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

    (另请参见:Windows path in Python

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

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

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

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

  • 绝对路径是从计算机的根目录开始的路径,例如,如果您在Windows上,则为“C:\ Python\scripts…”。
  • 相对路径不是从计算机的根目录开始的路径,而是相对于名为working directory的路径。您可以通过调用os.getcwd()来查看Python的当前工作目录。

如果您尝试执行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') #full path

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

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

试试这个:

file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')

相关问题 更多 >