Записать файл в каталог, который не существует
Как использовать 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/
не существует. Если каталог не существует, просто создайте каталог и напишите там файл.
Ответы
Ответ 1
Вам нужно сначала создать каталог.
Реализация 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(...)
Ответ 2
Сделайте либеральное использование модуля 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))
Ответ 3
Вы можете просто создать путь, который хотите создать файл, используя 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 solution
Ответ 4
Для 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(...)