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

时间:2012-08-30 17:01:40

标签: python file file-io filenotfoundexception file-not-found

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

这是代码:

file1 = open('recentlyUpdated.yaml')

错误是:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • 当然,我检查了这是文件的正确名称。
  • 我尝试移动文件,为open()提供文件的完整路径,但似乎都没有。

7 个答案:

答案 0 :(得分:53)

  • 确保文件存在:使用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上)。
  • 相对路径是一条不以计算机根目录开头的路径,而是相对于名为working directory的路径。您可以通过调用os.getcwd()来查看Python的当前工作目录。

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

示例:假设在file.txt中找到C:\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

答案 1 :(得分:6)

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

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

试试这样:

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

答案 2 :(得分:4)

最有可能的问题是,您正在使用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。仔细检查文件的扩展名。

答案 3 :(得分:1)

如果是VSCode,请参见工作区。如果您在其他工作空间中,此错误可能会出现

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分:0)

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

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

如果是这样的--> ./folder/subfolder/file --> 计算机将在当前工作目录中搜索文件夹。

答案 6 :(得分:-1)

我遇到了同样的问题。我的问题是关于文件名。我将文件名从 ASVspoof2017_train.trn.txt 更改为 ASV.txt 并删除了错误!