将文件写入不存在的目录

Bil*_*llz 17 python

如何使用with open() as f: ...在不存在的目录中写入文件.

例如:

with open('/Users/bill/output/output-text.txt', 'w') as file_to_write:
    file_to_write.write("{}\n".format(result))
Run Code Online (Sandbox Code Playgroud)

假设该/Users/bill/output/目录不存在.如果目录不存在,只需创建目录并在那里写入文件.

Jon*_*art 33

您需要先创建目录.

这个答案mkdir -p实现将完成你想要的.将根据需要创建任何父目录,并且如果它已经存在则默默地执行任何操作.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(...)
Run Code Online (Sandbox Code Playgroud)

  • 现在,您可以通过将 `exists_ok=True` 传递给 `os.makedirs` 来避免错误处理 (5认同)

Yak*_*eri 25

对于 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(...)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是 2020 年公认的答案。不再需要搞乱自定义函数和操作系统模块。 (8认同)
  • 这里有一个语法错误。它应该是 `Path('Users/bill/output')` 或 `Path('Users') / 'bill' / 'output'` (4认同)

Hag*_*ard 13

Yakir Tuberi 给出的答案很好,但我想补充一点,您需要parents=True嵌套文件夹的参数,如此处所述。因此,代码如下所示:

from pathlib import Path

p = Path('Users/bill/output')
p.mkdir(parents=True, exist_ok=True)
with (p / 'output-text.txt').open('w') as opened_file:
    opened_file.write(...)
Run Code Online (Sandbox Code Playgroud)


huu*_*huu 11

自由使用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))
Run Code Online (Sandbox Code Playgroud)

  • 这也不能处理制作中间目录。 (2认同)