繁体   English   中英

以“w”模式打开文件:IOError: [Errno 2] 没有那个文件或目录

[英]open file in "w" mode: IOError: [Errno 2] No such file or directory

当我尝试使用以下代码以写入模式打开文件时:

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模式应该创建文件,对吗? 那么这个错误怎么会发生呢?

如果包含您尝试打开的文件的目录不存在,即使尝试以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")

由于您没有“起始”斜杠,因此您的 Python 脚本正在寻找相对于当前工作目录(而不是文件系统的根目录)的文件。 还要注意,通向该文件的目录必须存在!

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

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

我有同样的错误,但在我的情况下,原因是在 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:

它按预期工作。

检查脚本是否对该目录具有写权限。 尝试这个:

chmod a+w dir/dir2/dir3

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

如果您尝试将损坏的软链接覆盖到同名文件,也会发生此错误。 在这种情况下,删除损坏的软链接,您将能够写入新文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM