Как скопировать каталог и его содержимое в существующее место с помощью 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

Interesting Posts

Возврат первых N символов строки юникода

Определение того, сколько раз подстрока встречается в строке в Python

Pyparsing: длина переменной переменной, переменное содержимое, переменная пробельная подстрока

Создание матрицы замешательства из нескольких CSV-файлов

Пилинт говорит, что модуль «строка» устарел. Каков новый способ получить диапазон символов нижнего регистра?

Сохранение интерактивных рисунков Matplotlib

ошибка с функцией parse в lxml

Асинхронные сокеты с выделенным – Python

Google App Engine / Drive SDK: ловить много исключений в отношении срока действия HTTP

Прочитайте базу данных Access на Python на платформе, отличной от Windows (Linux или Mac)

Управление цветом выражения LaTeX в ipton qtconsole

Протокол Python разделен между stdout и stderr

Python Реализация шаблона проектирования пула объектов

установка MySQLdb для Python 2.6 на OSX

Небуферизованное чтение из процесса с использованием подпроцесса в Python

Python - лучший язык программирования в мире.