Подтвердить что ты не робот

Как скопировать каталог и его содержимое в существующее место с помощью Python?

Я пытаюсь скопировать каталог и все его содержимое в уже существующий путь. Проблема заключается в том, что между модулем os и модулем shutil, похоже, нет способа сделать это. функция shutil.copytree() ожидает, что путь назначения не существует заранее.

Точный результат, который я ищу, - это скопировать всю структуру папок поверх другой, без перезаписи на любые найденные дубликаты. Прежде чем я перейду и начну писать свою собственную функцию, я подумал, что спрошу, знает ли кто-нибудь о существующем рецепте или фрагменте, который делает это.

4b9b3361

Ответ 1

distutils.dir_util.copy_tree делает то, что вы хотите.

Скопировать полное дерево каталогов src в новое место dst. Оба src и dst должны быть именами каталогов. Если src не каталог, поднимите DistutilsFileError. Если dst не существует, он создается с mkpath(). Конечный результат копия состоит в том, что каждый файл в src скопированы в dst, а каталоги в src рекурсивно скопированы в dst. Верните список файлов, которые были скопированы или могут быть скопированы, используя их выходное имя. Возврат значение не изменяется при обновлении или dry_run: это просто список всех файлов под src, с именами изменено на dst.

(дополнительная документация по указанному выше URL-адресу)

Ответ 2

Почему бы не реализовать его самостоятельно, используя os.walk?

Ответ 3

Для операций с файлами высокого уровня, использующих модуль shutil, и в вашем случае функция copytree. Я думаю, что это чище, чем "злоупотребление" distutils.

ОБНОВЛЕНИЕ:: Забудьте ответ, я упустил из виду, что OP действительно попытался заманить.

Ответ 4

Вы получаете сообщение об ошибке "Не удается создать каталог, когда он уже присутствует"? Я не уверен, насколько это глупо, но все, что я сделал, это вставить одну строку в модуль copytree: Я изменил:

def copytree(src, dst, symlinks=False):
    names = os.listdir(src)
    os.makedirs(dst)

в

def copytree(src, dst, symlinks=False):
    names = os.listdir(src)
    if (os.path.isdir(dst)==False):
        os.makedirs(dst)       

Думаю, я сделал несколько бладеров. Если да, мог бы кто-нибудь указать мне на это? Извините, я очень новичок в python: P