Как скопировать каталог и его содержимое в существующее место с помощью Python?
Я пытаюсь скопировать каталог и все его содержимое в уже существующий путь. Проблема заключается в том, что между модулем os и модулем shutil, похоже, нет способа сделать это. функция shutil.copytree()
ожидает, что путь назначения не существует заранее.
Точный результат, который я ищу, – это скопировать всю структуру папок поверх другой, автоматически переписывая все найденные дубликаты. Прежде чем я вскочил и начал писать свою собственную функцию, я подумал, что спрошу, знает ли кто-нибудь о существующем рецепте или фрагменте, который делает это.
4 Solutions collect form web for “Как скопировать каталог и его содержимое в существующее место с помощью Python?”
distutils.dir_util.copy_tree
делает то, что вы хотите.
Скопируйте полное дерево каталогов src в новое место dst. Оба src и dst должны быть именами каталогов. Если src не является каталогом, поднимите DistutilsFileError. Если dst не существует, он создается с помощью mkpath (). Конечным результатом копии является то, что каждый файл в src копируется в dst, а каталоги под src рекурсивно копируются в dst. Верните список файлов, которые были скопированы или, возможно, были скопированы, используя их имя вывода. На возвращаемое значение не влияет обновление или dry_run: это просто список всех файлов под src, с именами, которые были изменены под dst.
(дополнительная документация по указанному выше URL-адресу)
Почему бы не реализовать его самостоятельно, используя os.walk
?
Для операций с файлами высокого уровня, например, с использованием модуля shutil, а в вашем случае – функции copytree. Я думаю, что это чище, чем «злоупотребление» distutils.
ОБНОВЛЕНИЕ:: Забудьте ответ, я не обратил внимания на то, что ОП действительно старался заткнуться.
Вы получаете сообщение об ошибке «Не удается создать каталог, когда он уже присутствует»? Я не уверен, насколько это глупо, но все, что я сделал, это вставить одну строку в модуль 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