Создать целевой путь для файлов shutil.copy

Если в ./a/b/c не существует такой путь, как b/c/, shutil.copy("./blah.txt", "./a/b/c/blah.txt") будет жаловаться, что адресата не существует. Каков наилучший способ создания и пути назначения и копирования файла на этот путь?

Ответы

Ответ 1

Используйте os.makedirs для создания дерева каталогов.

Ответ 2

Я использую нечто похожее на это, чтобы проверить, существует ли каталог, прежде чем делать что-то с ним.

if not os.path.exists('a/b/c/'):
    os.mkdir('a/b/c')

Ответ 3

Способ EAFP, избегайте гонок и ненужных системных вызовов:

import errno
import os
import shutil

src = "./blah.txt"
dest = "./a/b/c/blah.txt"
# with open(src, 'w'): pass # create the src file
try:
    shutil.copy(src, dest)
except IOError as e:
    # ENOENT(2): file does not exist, raised also on missing dest parent dir
    if e.errno != errno.ENOENT:
        raise
    # try creating parent directories
    os.makedirs(os.path.dirname(dest))
    shutil.copy(src, dest)