Как я копирую весь каталог файлов в существующий каталог с помощью Python?

Два трюка . В основном, инвертирование HTML-кода ваших желаемых элементов в HTML и использование ~ Операторы следующего сиблинга :

float-right + инвертируют порядок HTML элементы

div{ /* Do with the parent whatever you know just to make the
  inner float-right elements appear where desired */
  display:inline-block;
}
span{
  float:right;  /* float-right the elements! */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
  background:red;
} 
<div>
  <!-- Reverse the order of inner elements -->
  <span>5</span>
  <span>4</span>
  <span>3</span>
  <span>2</span>
  <span>1</span>
</div>


Родитель с direction: rtl; + инвертирует порядок внутренних элементов

.inverse{
  direction: rtl;
  display: inline-block; /* inline-block to keep parent at the left of window */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
  background:gold;
}
Hover one span and see the previous elements being targeted!<br>

<div class="inverse">
  <!-- Reverse the order of inner elements -->
  <span>5</span>
  <span>4</span>
  <span>3</span>
  <span>2</span>
  <span>1</span>
</div>

179
задан SilentGhost 8 December 2009 в 08:06
поделиться

4 ответа

Вот версия, которая ожидает pathlib.Path, как введено.

# Recusively copies the content of the directory src to the directory dst.
# If dst doesn't exist, it is created, together with all missing parent directories.
# If a file from src already exists in dst, the file in dst is overwritten.
# Files already existing in dst which don't exist in src are preserved.
# Symlinks inside src are copied as symlinks, they are not resolved before copying.
#
def copy_dir(src, dst):
    dst.mkdir(parents=True, exist_ok=True)
    for item in os.listdir(src):
        s = src / item
        d = dst / item
        if s.is_dir():
            copy_dir(s, d)
        else:
            shutil.copy2(str(s), str(d))

Примечание, что эта функция требует Python 3.6, который является первой версией Python где os.listdir() поддержки подобные пути объекты, как введено. Если необходимо поддерживать более ранние версии Python, можно заменить listdir(src) listdir(str(src)).

0
ответ дан 23 November 2019 в 06:15
поделиться

Python 3.8 представил dirs_exist_ok аргумент к shutil.copytree :

Рекурсивно копируют все дерево каталогов, базированное в src к каталогу, названному dst, и возвратите целевой каталог. dirs_exist_ok диктует, повысить ли исключение в случае, если dst или любой недостающий родительский каталог уже существуют.

Поэтому с Python 3.8 + это должно работать:

import shutil

shutil.copytree('bar', 'foo')
shutil.copytree('baz', 'foo', dirs_exist_ok=True)
1
ответ дан 23 November 2019 в 06:15
поделиться

Я предполагаю, что самым быстрым и простым способом было бы заставить python вызывать системные команды ...

пример ..

import os
cmd = '<command line call>'
os.system(cmd)

Tar и gzip вверх по каталогу .... распаковать и распаковать каталог в желаемом месте.

да?

0
ответ дан 23 November 2019 в 06:15
поделиться

документы явно указывают, что целевой каталог должен не существовать :

Целевой каталог, названный dst , еще не должен существовать ; он будет создан вместе с отсутствующими родительскими каталогами.

Я думаю, что лучше всего сделать os.walk второй и все последующие каталоги, каталог и файлы copy2 и выполнить дополнительные copystat для каталогов. В конце концов, это именно то, что делает copytree , как описано в документации. Или вы можете скопировать и copystat каждый каталог / файл и os.listdir вместо os.walk .

7
ответ дан 23 November 2019 в 06:15
поделиться
Другие вопросы по тегам:

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