由于某些原因,我的代码无法打开简单的文件:
这是代码:
file1 = open('recentlyUpdated.yaml')
错误是:
IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
- 自然地,我检查了这是文件的正确名称。
- 我尝试在文件中四处移动,提供文件
open()
的完整路径,但似乎都不起作用。
由于某些原因,我的代码无法打开简单的文件:
这是代码:
file1 = open('recentlyUpdated.yaml')
错误是:
IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
open()
的完整路径,但似乎都不起作用。Answers:
os.listdir()
查看当前工作目录中的文件列表os.getcwd()
(如果从IDE启动代码,则可能位于其他目录中)os.chdir(dir)
,dir
即文件所在的文件夹,然后像以前一样使用文件名打开文件。open
呼叫中指定文件的绝对路径。dir = r'C:\Python32'
'C:\\User\\Bob\\...'
'C:/Python32'
,不需要转义。让我澄清一下Python如何查找文件:
working directory
。您可以通过调用查看Python的当前工作目录os.getcwd()
。如果您尝试这样做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
'b'
在open函数中传递第二个参数a ,以指定您将文件读取为二进制数据。
问题很可能是您使用相对文件路径打开文件,但是当前工作目录未设置为您认为的样子。
人们普遍误解为相对路径是相对于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()
(另请参见:如何获取当前正在执行的文件的路径和名称?)
打开文件之前,请更改当前工作目录:
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!
为避免犯此错误,请记住对文件路径使用原始字符串文字:
path = r'C:\Users\newton\file.yaml'
# Correct!
(另请参见:Python中的Windows路径)
忘记Windows不显示文件扩展名:
由于Windows不显示已知的文件扩展名,因此有时您以为文件名为file.yaml
,而实际上是file.yaml.yaml
。仔细检查文件的扩展名。
可能是您关闭了“ file1”。
只需使用“ w”标志,即创建新文件:
file1 = open('recentlyUpdated.yaml', 'w')
mode是一个可选字符串,用于指定打开文件的模式。默认为“ r”,这意味着可以在文本模式下阅读。其他常用值是用于写入的“ w”(如果文件已经存在,则将其截断)...
(另请参见https://docs.python.org/3/library/functions.html?highlight=open#open)