Я пытаюсь написать функцию Python, которая копирует все файлы .bmp из каталога и его подкаталогов в указанный каталог назначения.
Я пытался использовать os.walk, но он достигает только первого подкаталога, а затем останавливается. Вот что у меня есть до сих пор:
def copy(src, dest):
for root, dirs, files in os.walk(src):
for file in files:
if file[-4:].lower() == '.bmp':
shutil.copy(os.path.join(root, file), os.path.join(dest, file))
Что мне нужно изменить, чтобы он копировал каждый файл .bmp из каждого подкаталога?
Обновлено: этот код действительно работает, просто в исходном каталоге было меньше растровых файлов, чем ожидалось. Однако для программы, которую я пишу, я предпочитаю метод с использованием glob, показанный ниже.






Если я правильно понимаю, вы хотите glob с recursive=True, который с помощью спецификатора ** будет рекурсивно перемещаться по каталогам и находить все файлы, удовлетворяющие спецификатору формата:
import glob
import os
import shutil
def copy(src, dest):
for file_path in glob.glob(os.path.join(src, '**', '*.bmp'), recursive=True):
new_path = os.path.join(dest, os.path.basename(file_path))
shutil.copy(file_path, new_path)
Ваш код копирует все файлы bmp, которые находятся в src, в папку dest, не копируя иерархию файлов:
src/1.bmp src/dir1/2.bmp src/dir2/3.bmpвdest/1.bmp dest/2.bmp dest/3.bmpЭто то, что вы хотели?