Я хочу переместить файлы из сложной структуры каталога в одно место. Например у меня есть эта глубокая иерархия:Сложная структура каталогов в Python
foo/
foo2/
1.jpg
2.jpg
...
Я хочу, чтобы это было:
1.jpg
2.jpg
...
Мое текущее решение:
def move(destination):
for_removal = os.path.join(destination, '\\')
is_in_parent = lambda x: x.find(for_removal) > -1
with directory(destination):
files_to_move = filter(is_in_parent,
glob_recursive(path='.'))
for file in files_to_move:
shutil.move(file, destination)
Определения: directory
и glob_recursive
. Обратите внимание, что мой код только перемещает файлы в их общий родительский каталог, а не в произвольное место назначения.
Как перенести все файлы из сложной иерархии в одно место лаконично и элегантно?
Вы не обрабатываете случай, когда имя файла, которое вы перемещаете, совпадает с именем файла в каталоге назначения. Например, что, если исходные sub dirs содержат только файлы с именем hello.txt? move() вызовет ошибку. – 7stud
Это решение также оставит пустые вспомогательные каталоги. Чтобы решить: храните _dirs рядом с тем, где вы устанавливаете first_loop_pass в False, а затем в конце после того, как вы делаете файл, перемещается только по кругу и вызывает shutil.rmtree() – Ben