Предоставленный код вообще не работал в моей системе. Я переделал его так, чтобы было перемещено по три файла из каждой из двух подпапок каталога A.
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, root2), file))
В вызове shutil.move вы перемещали файлы в root2, root расположение каталога B. Заменяя root2 на подпапку (переменная k), он правильно копирует его в подпапки каталога B. снова, вызывая исключение, поскольку файлы из каталога A уже были бы перемещены.
for root2, dirs2, files2 in os.walk(directory):
Я приложил рабочий код. Если вы хотите, чтобы все файлы в каждой подпапке копировались, удалите -1 при назначении select.
import os
import shutil
path = 'C:\\Users\\alex\\PycharmProjects\\test\\directoryA'
directory = 'C:\\Users\\alex\\PycharmProjects\\test\\directoryB'
for root, dirs, files in os.walk(path):
dirs.sort()
k = os.path.basename(root)
if files == []:
continue
i = 0
select = len(files) - 1 # select 1 files
if not os.path.exists(os.path.join(directory, k)): # Check to see if the directory exists
os.mkdir(os.path.join(directory, k))
for i, file in enumerate(sorted(files)):
# print(file)
if i < select:
print(file)
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, k), file))