Кажется, в Python есть функции для копирования файлов (например shutil.copy
) и функции для копирования каталогов (например shutil.copytree
), но я не нашел ни одной функции, которая обрабатывала бы и то, и другое. Конечно, легко проверить, хотите ли вы скопировать файл или каталог, но это кажется странным упущением.
Неужели нет стандартной функции, которая работает как команда unix cp -r
, т.е. поддерживает как каталоги, так и файлы и копирует рекурсивно? Что было бы наиболее элегантным способом решения этой проблемы в Python?
copytree
копирование одного файла?Ответы:
Я предлагаю вам сначала позвонить
shutil.copytree
, а если возникнет исключение, повторите попытку с помощьюshutil.copy
.источник
shutil.copytree
функции улучшать и управлять обоими случаями в будущем. 4) Исключения в Python не такие уж и исключительные; например, итерация останавливается, вызывая исключение StopIteration.Чтобы добавить на Tzot - х и GNS ответов, вот альтернативный способ копирования файлов и папок рекурсивно. (Python 3.X)
Если это ваш первый раз и вы не знаете, как рекурсивно копировать файлы и папки, я надеюсь, что это поможет.
источник
shutil.copy
иshutil.copy2
копируем файлы.shutil.copytree
копирует папку со всеми файлами и вложенными папками.shutil.copytree
используетсяshutil.copy2
для копирования файлов.Таким образом, аналог того, что
cp -r
вы говорите, - этоshutil.copytree
потому, чтоcp -r
цели и копируют папку и ее файлы / подпапки, напримерshutil.copytree
. Без-r
cp
копий файлы нравятсяshutil.copy
иshutil.copy2
делают.источник
shutil.copytree('C:\myfile.txt', 'C:\otherfile')
. Не работает. Это то, о чем спрашивал ОП ... 7 лет назад.Unix
cp
не «поддерживает и каталоги, и файлы»:Чтобы заставить cp скопировать каталог, вы должны вручную сообщить cp, что это каталог, используя флаг '-r'.
Однако здесь есть некоторая несогласованность -
cp -r
при передаче имени файла в качестве источника с радостью копирует только один файл; copytree не будет.источник
Я думаю, что copy_tree - это то, что вы ищете
источник
Метод python shutil.copytree - это беспорядок. Я сделал то, что работает правильно:
источник