Я хочу скопировать несколько каталогов с одинаковой структурой (подкаталоги имеют одинаковые имена), но различное содержимое в третье место и объединить их. В то же время я хочу игнорировать некоторые расширения файлов, а не копировать их.
Я обнаружил, что первая задача может быть легко обработана функцией copy_tree()
из библиотеки distutils.dir_util
. Проблема здесь в том, что copy_tree()
не может игнорировать файлы; он просто копирует все.
distutils.dir_util.copy_tree() - пример
dirs_to_copy = [r'J:\Data\Folder_A', r'J:\Data\Folder_B']
destination_dir = r'J:\Data\DestinationFolder'
for files in dirs_to_copy:
distutils.dir_util.copy_tree(files, destination_dir)
# succeeds in merging sub-directories but copies everything.
# Due to time constrains, this is not an option.
Для второй задачи (копирование с возможностью исключения файлов) на этот раз функция copytree()
из библиотеки shutil
. Проблема заключается в том, что он не может объединять папки, поскольку каталог назначения не должен существовать.
shutil.copytree() - пример
dirs_to_copy = [r'J:\Data\Folder_A', r'J:\Data\Folder_B']
destination_dir = r'J:\Data\DestinationFolder'
for files in dirs_to_copy:
shutil.copytree(files, destination_dir, ignore=shutil.ignore_patterns("*.abc"))
# successfully ignores files with "abc" extensions but fails
# at the second iteration since "Destination" folder exists..
Есть ли что-то, что обеспечивает лучшее из обоих миров, или я должен сам это кодировать?