Ваша проблема здесь в том, что вы не передаете файловый объект cv2.imwrite(os.path.join(save_path,img_name))
при попытке выполнить копирование;это то, что говорит вам ошибка.
Однако, ваш текущий подход включает в себя вложенный цикл for
, который даст низкую производительность.Если вы хотите знать только те файлы, которые имеют общие каталоги, вы можете создать set
имен файлов в каждом каталоге и найти пересечение.Затем вам просто нужно перебрать общие файлы и скопировать их (как сказано в комментариях, здесь нет необходимости в cv2
- они могут быть изображениями, но это просто обычные файлы, которые можно копировать).
import os
from shutil import copyfile
dir_1 = 'A'
dir_2 = 'B'
output_dir = 'C'
files_1 = os.listdir(dir_1)
files_2 = os.listdir(dir_2)
# Find the common files between both
common_files = set(files_1).intersection(files_2)
# Copy the common files over.
for file in common_files:
copyfile(os.path.join(dir_1, file),
os.path.join(output_dir, file))
Если причина, по которой вы удаляете последние символы из файлов в os.listdir
, заключается в том, что файлы имеют одинаковое имя, но разные расширения, вам нужно всего лишь сделать две небольшие модификации (где я предполагаюрасширение .png
, которое необходимо добавить позже):
files_1 = [item[:-4] for item in os.listdir(dir_1)]
files_2 = [item[:-4] for item in os.listdir(dir_2)]
И:
for file in common_files:
file = file + '.png' # Add the extension back on to the file name
copyfile(os.path.join(dir_1, file),
os.path.join(output_dir, file))