如何使用with open() as f: ...
将文件写入不存在的目录中。
例如:
with open('/Users/bill/output/output-text.txt', 'w') as file_to_write:
file_to_write.write("{}\n".format(result))
我们说/Users/bill/output/
目录不存在。如果目录不存在,只需创建目录并在那里写入文件。
答案 0 :(得分:29)
您需要先创建目录。
mkdir -p
实施from this answer可以满足您的需求。 mkdir -p
将根据需要创建任何父目录,如果已经存在,则默默地执行任何操作。
在打开要写入的文件之前,我已经实现了一个safe_open_w()
方法,该方法在路径的目录部分调用mkdir_p
:
import os, os.path
import errno
# Taken from https://stackoverflow.com/a/600612/119527
def mkdir_p(path):
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else: raise
def safe_open_w(path):
''' Open "path" for writing, creating any parent directories as needed.
'''
mkdir_p(os.path.dirname(path))
return open(path, 'w')
with safe_open_w('/Users/bill/output/output-text.txt') as f:
f.write(...)
答案 1 :(得分:8)
自由使用os
模块:
import os
if not os.path.isdir('/Users/bill/output'):
os.mkdir('/Users/bill/output')
with open('/Users/bill/output/output-text.txt', 'w') as file_to_write:
file_to_write.write("{}\n".format(result))
答案 2 :(得分:2)
您可以使用 os.makedirs 创建您要创建文件的路径:
import os
import errno
def make_dir(path):
try:
os.makedirs(path, exist_ok=True) # Python>3.2
except TypeError:
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else: raise
来源:this SO解决方案
答案 3 :(得分:1)
Yakir Tuberi 给出的答案很棒,但我想补充一点,如 here 所述,您需要为嵌套文件夹设置参数“parents=True”。因此,代码将如下所示:
from pathlib import Path
p = Path('Users' / 'bill' / 'output')
p.mkdir(parents=True,exist_ok=True)
(p / 'output-text.txt').open('w').write(...)
答案 4 :(得分:0)
对于Python 3,可以与pathlib.Path一起使用:
from pathlib import Path
p = Path('Users' / 'bill' / 'output')
p.mkdir(exist_ok=True)
(p / 'output-text.txt').open('w').write(...)