出于某种原因,我的代码在打开简单文件时遇到问题:
这是代码:
1file1 = open('recentlyUpdated.yaml')
错误是:
1IOError: [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当前的工作目录。
如果尝试执行open('sortedLists.yaml'),python将看到您正在传递一个相对路径,因此它将搜索当前工作目录中的文件。调用os.chdir将更改当前工作目录。
例:假设file.txt是在C:\Folder中发现的。
要打开它,可以执行以下操作:
1
2os.chdir(r'C:\Folder')
open('file.txt') #relative path, looks inside the current working directory
或
1open(r'C:\Folder\file.txt') #full path
当使用os.chdir(dir)时,我需要把路径放在目录中还是只放在目录名中?另外,一旦我得到了文件名,我是把它放在open()中还是写open(os.chdir(dir))?
@圣地亚哥我在回答中澄清了这一点。
+1代表原始字符串R''
jpeg或png类型如何?即使是公益诉讼也无济于事……
您可以使用相同的技术打开任何文件类型。但是,您必须将'b'作为open函数中的第二个参数传递,以指定您正在以二进制数据的形式读取文件。
+1表示os.listdir()建议。这是一个在键盘上敲击你的脸的时刻,但如果在Windows10上工作,请确保你没有手动添加一个文件扩展名,其中已经有一个。Windows中的默认视图通常隐藏扩展名,如果您犯了这个错误,它可能看起来像"filename.txt",其中的名称实际上是"filename.txt.txt"。要验证,请仔细查看os.listdir()的输出。此文件名不匹配也会导致'[errno 2]没有此类文件或目录:'错误。我知道,我知道。我的额头上还有空格键的印记。
文件可能已存在,但可能具有不同的路径。尝试写入文件的绝对路径。
尝试使用os.listdir()函数检查是否至少python看到该文件。
尝试如下:
1
2file1 = 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。仔细检查文件的扩展名。