尝试使用 open(文件名, 'w' ) 会给出 IOError: [errno 2] 如果目录不存在,则没有这样的文件或目录



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

下面是不起作用的代码:

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' #

我找到的大多数答案都与路径中的斜杠有关,所以......

I tried 'D:/temp/test.txt' and got an error.
I tried r'D:temptest.txt' and got an error.

当我尝试在 D:/的根目录下创建一个文件我有成功。

'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])

递归目录创建函数。与 mkdir() 类似,但使所有中级目录都包含叶目录。

因此,您的代码可能会运行如下内容:

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)

哪个会说真或假,取决于它是否存在。

我在

抓取网站时遇到了同样的错误,因为我试图创建一个以抓取的标题命名的文本文件,因为抓取的数据包含特殊字符,如/?:"|<>。但是我的操作系统不允许我使用这些特殊字符创建文件名。

如果是这种情况,您可以使用正则表达式将这些字符替换为空字符串。

这是代码:

import re
test_str = "a/b?c<d>e|f"
new_str = re.sub(r"[*/:?"<>|]", "", test_str, re.MULTILINE)
# new_str == abcdef

相关内容

  • 没有找到相关文章

最新更新