关于python:尝试使用open(filename, ‘w’ ) 会产生ioerror:[errno 2]如果目录不存在,则没有此类文件或目录

Trying to use open(filename, 'w' ) gives IOError: [Errno 2] No such file or directory if directory doesn't exist

我正在尝试使用python创建并写入文本文件。我已搜索过,无法找到此错误的解决方案/原因。

以下是不起作用的代码:

1
2
3
4
5
6
7
8
9
afile = 'D:\\temp\\test.txt'
outFile = open(afile, 'w' )
outFile.write('Test.')
outFile.close()

# Error: 2
# Traceback (most recent call last):
#   File"<maya console>", line 1, in <module>
# IOError: [Errno 2] No such file or directory: 'D:\\temp\\test.txt' #

我发现的大多数答案都与路径中的斜线有关,所以…

1
2
I tried 'D:/temp/test.txt' and got an error.
I tried r'D:\temp\test.txt' and got an error.

当我试图在d:的根目录下创建一个文件时,我已经成功了。

1
2
3
'D:/test.txt' works.
'D:\\test.txt' works.
r'D:\test.txt' works.

似乎在创建文件时无法创建所需的目录路径。在Windows(7)上使用python在特定路径创建文件的正确方法是什么?我是否误解open()能做什么?如果目录不存在,它会创建目录吗?或者在"写"模式下使用open()创建文件之前,需要显式创建目录路径吗?


您认为文件的父目录必须存在才能使open成功,这是正确的。处理这个问题的简单方法是打电话给os.makedirs

从文档中:

os.makedirs(path[, mode])

Recursive directory creation function. Like mkdir(), but makes all intermediate-level directories needed to contain the leaf directory.

因此,您的代码可能运行如下所示:

1
2
3
4
5
6
filename = ...
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
    os.makedirs(dirname)
with open(filename, 'w'):
    ...


如果尝试在不存在的目录中创建文件,则会出现此错误。

您需要首先确保目录存在。根据这个答案,你可以用os.makedirs()来实现。


或者,您可以在打开文件之前检查它是否存在:

os.path.exists (afile)

这要么说对要么说错,取决于它是否存在。