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当前的工作目录。
如果尝试执行
例:假设
要打开它,可以执行以下操作:
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 |
文件可能已存在,但可能具有不同的路径。尝试写入文件的绝对路径。
尝试使用
尝试如下:
1 2 | file1 = open(r'Drive:\Dir ecentlyUpdated.yaml') |
最有可能的问题是,您正在使用相对文件路径打开文件,但当前工作目录未设置为您认为的路径。
常见的误解是相对路径与Python脚本的位置相关,但这是不真实的。相对文件路径总是相对于当前工作目录,并且当前工作目录不必是Python脚本的位置。
您有三种选择:
使用绝对路径打开文件:
1file = open(r'C:\path\to\your\file.yaml')生成相对于python脚本的文件路径:
1
2
3
4
5from pathlib import Path
script_location = Path(__file__).absolute().parent
file_location = script_location / 'file.yaml'
file = file_location.open()(另请参见:如何获取当前正在执行的文件的路径和名称?)
打开文件前更改当前工作目录:
1
2
3
4import os
os.chdir(r'C:\path\to\your\file')
file = open('file.yaml')
其他可能导致"找不到文件"错误的常见错误包括:
在文件路径中意外使用转义序列:
1
2
3
4
5path = 'C:\Users
ewton\file.yaml'
# Incorrect! The '
' in 'Users
ewton' is a line break character!为避免出现此错误,请记住对文件路径使用原始字符串文本:
1
2
3path = r'C:\Users
ewton\file.yaml'
# Correct!(另请参见:python中的windows路径)
忘记Windows不显示文件扩展名:
由于Windows不显示已知的文件扩展名,有时当您认为您的文件名为
file.yaml 时,它实际上名为file.yaml.yaml 。仔细检查文件的扩展名。