копировать конкретные вложенные папки Python [duplicate]

В принципе, переназначение параметров объекта не влияет на аргумент, например,

private void foo(Object bar) {
    bar = null;
}

public static void main(String[] args) {
    String baz = "Hah!";
    foo(baz);
    System.out.println(baz);
}

будет печатать "Hah!" вместо null. Причина этого в том, что bar является копией значения baz, что является лишь ссылкой на "Hah!". Если бы это была фактическая ссылка, то foo изменила бы baz на null.

4
задан Community 23 May 2017 в 12:25
поделиться

1 ответ

shutil уже содержит функцию ignore_pattern, поэтому вам не нужно предоставлять свои собственные. Прямо из документации :

from shutil import copytree, ignore_patterns

copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

Это скопирует все, кроме .pyc файлов и файлов или каталогов, чье имя начинается с tmp.

< / blockquote>

Немного сложно (и не обязательно) объяснять, что происходит: ignore_patterns возвращает функцию _ignore_patterns в качестве возвращаемого значения, эта функция добавляется в copytree в качестве параметра, а copytree вызывает эту функцию по мере необходимости, поэтому вам не нужно знать или ухаживать, как вызвать эту функцию _ignore_patterns. Это просто означает, что вы можете исключить некоторые ненужные файлы трещины (например, *.pyc). Тот факт, что имя функции _ignore_patterns начинается с подчеркивания, - это намек на то, что эта функция представляет собой деталь реализации, которую вы можете игнорировать.

copytree ожидает, что папка destination не существует все же. Не проблема в том, что эта папка и ее подпапки появляются после того, как copytree начинает работать, copytree знает, как с этим справиться.

Теперь include_patterns написано, чтобы сделать обратное: игнорировать все, что явно не включено. Но он работает так же: вы просто называете это, он возвращает функцию под капотом, а coptytree знает, что делать с этой функцией:

copytree(source, destination, ignore=include_patterns('*.dwg', '*.dxf'))
10
ответ дан Jan 19 August 2018 в 02:07
поделиться
  • 1
    Привет @Jan, следующая функция заключается в создании динамического списка игнорирования на основе файлов, которые я хочу сохранить, т.е. CAD (& quot; .dwg & quot ;, & quot; .dxf "), поэтому все другие типы файлов затем игнорируются. У меня есть следующая работа, последнее препятствие - исключить папки, в которых нет файлов внутри них на основе include_patterns (& quot; .dwg & quot ;, & lt; / / & gt; .dxf & quot;). – Peter Wilson 27 February 2017 в 16:47
  • 2
    Где определяется метод include_patterns? – AK47 17 May 2017 в 11:52
  • 3
    @ AK47 include_patterns определен в OP. – Jan 18 May 2017 в 12:14
  • 4
    Ой............... – AK47 18 May 2017 в 16:06
Другие вопросы по тегам:

Похожие вопросы: