Python copytree с шаблоном игнорируемого игнорирования - PullRequest
5 голосов
/ 12 мая 2010

Я пытаюсь использовать python для копирования дерева файлов / каталогов.

возможно ли использовать copytree для копирования всего, что заканчивается в foo?

Существует функция шаблонов ignore_patterns, могу ли я дать ей отрицательное регулярное выражение? Поддерживаются ли они в python?

например.

copytree (src, dest, False, ignore_pattern ('! *. Foo')) Куда ! не означает ничего, что заканчивается в foo. спасибо.

Ответы [ 3 ]

7 голосов
/ 12 мая 2010

shutil.copytree имеет ключевое слово ignore . ignore можно установить на любой вызываемый. Учитывая посещаемый каталог и список его содержимого, вызываемый объект должен возвращать последовательность каталогов и имен файлов, которые следует игнорировать.

Например:

import shutil
def ignored_files(adir,filenames):
    return [filename for filename in filenames if not filename.endswith('foo')]

shutil.copytree(source, destination, ignore=ignored_files)
4 голосов
/ 12 мая 2010

Опираясь на ответ УНУТБУ. Далее берется список всех файлов, затем удаляет те, которые соответствуют «ignore_patterns», а затем возвращает его в виде списка файлов, которые игнорируются . То есть он делает двойное отрицание, копируя только те файлы, которые вам нужны.

import glob, os, shutil

def copyonly(dirpath, contents):
    return set(contents) - set(
        shutil.ignore_patterns('*.py', '*.el')(dirpath, contents),
        )

shutil.copytree(
    src='.',
    dst='temp/',
    ignore=copyonly,
    )
print glob.glob('temp/*')
0 голосов
/ 01 июля 2016
def documentation(format):
    call(['make', format, '-C', DOC_SOURCE_DIR])

    if (os.path.exists(DOC_DIR)):
        shutil.rmtree(DOC_DIR)

    ignored = ['doctrees']
    shutil.copytree('{0}/build/'.format(DOC_SOURCE_DIR), DOC_DIR, ignore=shutil.ignore_patterns(*ignored))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...