Можно ли скопировать файлы с помощью шаблона include и exclude с помощью python? - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно скопировать файлы из каталога с шаблонами. Так как я сделал, как показано ниже,

from fnmatch import fnmatch, filter
from os.path import isdir, join
from shutil import copytree, ignore_patterns

def include_patterns(*patterns):

    def _ignore_patterns(path, names):
        keep = set(name for pattern in patterns
                            for name in filter(names, pattern))
        ignore = set(name for name in names
                        if name not in keep and not isdir(join(path, name)))
        return ignore
    return _ignore_patterns


src_directory = r'SOURCH_PATH'
dst_directory = r'DST_PATH'
ignored_directory = r'DST_PATH2'
copytree(src_directory, ignored_directory,ignore=ignore_patterns('*.bat'))
copytree(src_directory, dst_directory,ignore=include_patterns('*.xls'))

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

copytree(src_directory, ignored_directory,ignore=ignore_patterns('*.bat'), ignore=include_patterns('*.xls'))

или есть какие-либо параметры для выполнения операции копирования с использованием шаблонов include и exclude?

Как этого добиться?

1 Ответ

0 голосов
/ 30 августа 2018

Предполагая, что вы хотите перезаписать папку назначения, если она уже существует, вы можете легко решить вашу проблему следующим образом:

if os.path.exists(destination_path):
    shutil.rmtree(destination_path)
shutil.copytree(<your_params>)
...