Я хотел бы переместить файлы, которые существуют в каталоге, в новые папки, содержащие определенную строку из имен файлов.Вот примеры имен файлов, которые у меня есть в каталоге (из тысяч):
WS1_APAL4900.pdf
WS1_APAL4900_A.pdf
WS1_APAL4900_B.pdf
WS1_APAL4900_C.pdf
WS1_CANM0901.pdf
WS1_CANM0901_A.pdf
WS2_CANM0901.pdf
WS2_CANM0901_A.pdf
WS3_CANM0901.pdf
WS3_CANM0901_A.pdf
WS3_CONT6565.pdf
Моя цель - разделить имена файлов в разделителях подчеркивания / s на 2 или 3 строки и взятьтолько вторая слева, которая содержит строку из 8 слов / цифр и создает из нее новые папки с таким именем: «MFMO1720», независимо от того, является ли оно именем с 2 или 3 строками.Теперь все файлы, которые имеют 8-символьную букву справа от первого подчеркивания слева, независимо от того, имеют ли они ИЛИ с именами _A, _B и т. Д., Должны быть перемещены в новую папку с 8-символьным символом.name.
На данный момент, когда я запускаю код, файлы с '_x' собраны все в одной папке (то есть папка 'APAL4900' содержит в себе 'WS1_APAL4900_A.pdf', 'WS1_APAL4900_B.pdf' и 'WS1_APAL4900_C.pdf », но не« WS1_APAL4900.pdf »).Файлы, которые НЕ имеют _A, _B, _C и т. Д., Попадают в папку с расширением .pdf в своем имени, т.е.«APAL4900.pdf» содержит только один файл (WS1_APAL4900.pdf).
Я пробовал split () и rsplit (), а также другие методы разбиения, но ни один из них не помогает мне получить все файлы с одинаковыми 8-характер к той же папке.
Любая помощь будет оценена!
Вот код:
folder = 'C:/test'
for file_path in glob.glob(os.path.join(folder, '*.*')):
new_dir = file_path.rsplit('_', 2)[1]
try:
os.mkdir(os.path.join(folder, new_dir))
except WindowsError:
# Handle the case where the target dir already exist.
pass
shutil.move(file_path, os.path.join(new_dir, os.path.basename(file_path)))```