在“ w”模式下打开文件: IOError: [ Errno 2]没有这样的文件或目录

当我尝试用以下代码在 写作模式下打开一个文件:

packetFile = open("%s/%s/%s/%s.mol2" % ("dir", "dir2", "dir3", "some_file"), "w")

我得到以下错误:

IOError: [Errno 2] No such file or directory: 'dir/dir2/dir3/some_file.mol2'

如果这个文件不存在,那么 w模式应该创建它,对吗? 那么这个错误是如何发生的呢?

120887 次浏览

检查脚本是否对该目录具有写权限:

chmod a+w dir/dir2/dir3

注意,这将授予该目录上的每个人写权限。

因为没有“ start”斜杠,所以 python 脚本寻找的是相对于当前工作目录的文件(而不是文件系统的根目录)。还要注意,导向文件的目录必须存在!

并且: 使用 os.path.join组合路径的元素。

例如: os.path.join("dir", "dir2", "dir3", "myfile.ext")

如果包含您试图打开的文件的 目录不存在,即使在尝试以 w模式打开文件时,您也会看到这个错误。

因为您使用相对路径打开文件,所以可能会对该目录具体是什么感到困惑。试着用一个快速的指纹来检查:

import os


curpath = os.path.abspath(os.curdir)
packet_file = "%s/%s/%s/%s.mol2" % ("dir", "dir2", "dir3", "some_file")
print "Current path is: %s" % (curpath)
print "Trying to open: %s" % (os.path.join(curpath, packet_file))


packetFile = open(packet_file, "w")

我有同样的错误,但在我的情况下,原因是,在 Windows 下,路径超过约250个字符。

在 Windows 环境中也出现了类似的问题,解决方案是在绝对路径中添加“ C:”。 我的目标是在用户桌面中保存一些文件

file_path = os.path.join(os.environ["HOMEPATH"], os.path.join("Desktop",
"log_file.log_%s_%s" %(
strftime("%Y_%m_%d", localtime()), "number_1")))

然后我试图打开这个目录保存 例如

file_ref = open(file_path, "w")

我添加这个是为了运行

file_ref = open(("C:\\"+file_path), "w")

如果试图将损坏的软链接覆盖到具有相同名称的文件,也会发生此错误。在这种情况下,删除损坏的软链接,您就可以编写新文件了。

我也有同样的问题,但我的根本原因和这里的任何人都不一样。以防有人也遇到同样的问题,我想跟大家分享一下。

在我的例子中,我不小心把括号放错了“ with”行:

with (open(os.path.join(curpath, unique_name)), 'w') as fw:

出现以下错误(为了清晰起见,对公司详细信息进行了模糊处理) :

Traceback (most recent call last):
File "./crap.py", line 60, in uniquify
with (open(os.path.join(curpath, unique_name)), 'w') as fw:
IOError: [Errno 2] No such file or directory: '/<mypath>/bin/python/<filename>'

这些括号将“ w”与 with ()函数放在一起,而不是像预期的那样与 open ()放在一起。我很惊讶它会出现这个 IO 错误,这意味着 open ()调用出了问题,这使得追踪这个错误比追踪显然来自 with ()调用要困难得多。

我不相信这些结果,只是再次修改它来复制,是的,我得到了同样的错误。

当我将括号切换到正确的版本时:

with (open(os.path.join(curpath, unique_name), 'w')) as fw:

它的工作原理。