У меня есть набор имен файлов в списке в разных папках, как показано ниже:
Входные файлы
['ABC.dat',
'ABC10.dat',
'ABC956.dat',
'ABC_DEF_1.dat',
'ABC_DEF_2.dat',
'ABC_DEF_3.dat',
'ABC10_DEF_1.dat',
'ABC10_DEF_2.dat',
'ABC10_DEF_3.dat',
'ABC956_DEF_1.dat',
'ABC956_DEF_2.dat',
'ABC956_DEF_3.dat',
'XYZ_ABC_1.dat',
'XYZ_ABC_2.dat',
'XYZ10_ABC_1.dat',
'XYZ10_ABC_2.dat',
'XYZ956_ABC_1.dat',
'XYZ956_ABC_2.dat',
'XYZ_PQR_JKL.dat',
'XYZ_PQR_JKL_1.dat',
'XYZ_PQR10_JKL.dat',
'XYZ_PQR10_JKL_1.dat',
'XYZ_PQR956_JKL.dat',
'XYZ_PQR956_JKL_1.dat']
Я хочу сгруппировать файлыследующим образом:
Список вывода
[['ABC.dat', 'ABC10.dat', 'ABC956.dat'],
['ABC_DEF_1.dat', 'ABC10_DEF_1.dat.dat', 'ABC956_DEF_1.dat'],
['ABC_DEF_2.dat', 'ABC10_DEF_2.dat.dat', 'ABC956_DEF_2.dat'],
['ABC_DEF_3.dat', 'ABC10_DEF_3.dat.dat', 'ABC956_DEF_3.dat'],
['XYZ_ABC_1.dat', 'XYZ10_ABC_1.dat', 'XYZ956_ABC_1.dat'],
['XYZ_ABC_2.dat', 'XYZ10_ABC_2.dat', 'XYZ956_ABC_2.dat'],
['XYZ_PQR_JKL.dat', 'XYZ_PQR10_JKL.dat', 'XYZ_PQR956_JKL.dat'],
['XYZ_PQR_JKL_1.dat', 'XYZ_PQR10_JKL_1.dat', 'XYZ_PQR956_JKL_1.dat']]
То есть файлы должны быть сгруппированы на основе структуры файлов.Примечание. DEF_1 и DEF_2 должны быть сгруппированы отдельно.Числа 10, 956 являются случайными, то есть они не известны заранее.Ниже приводится MWE, который группируется на основе первых нескольких букв, полученных из OP , как я могу распространить его на другие буквы, которые являются DEF.
MWE
import os
import random
import errno
import itertools
from itertools import repeat
#--------------------------------------
# Main rename code
for root, dirs, files in os.walk('./input_folder'):
for dir in dirs:
print (dir)
output_files = [s for s in os.listdir(os.path.join(root,dir)) if s.endswith('.dat')]
groups = [list(g) for _, g in itertools.groupby(sorted(output_files), lambda x: x[0:2])] # obtained from Aaron's answer https://gis.stackexchange.com/a/206053
print (groups)