出于某种原因,我的代码无法打开一个简单的文件:
这是代码:
file1 = open('recentlyUpdated.yaml')
错误是:
IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
open()
提供文件的完整路径,但似乎都没有。答案 0 :(得分:53)
os.listdir()
查看当前工作目录中的文件列表os.getcwd()
(如果您从IDE启动代码,则可能位于不同的目录中)os.chdir(dir)
,dir
作为文件所在的文件夹
找到,然后像你正在做的那样打开文件。open
来电中指定文件的绝对路径。dir = r'C:\Python32'
'C:\\User\\Bob\\...'
'C:/Python32'
,无需转义。让我澄清Python如何找到文件:
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 并删除了错误!