Как создать кортежи файлов в Python из разных папок, но не из своей?
Мне необходимо сравнить файлы, причем так, чтобы они лежали в разных папках. Например, есть директории spk1, spk2 и spk3, и в каждой - свои 4 файла. Построить кортежи мне надо из каждого файла папки spk1 с каждым одним файлом spk2 и с каждым одним файлом spk3, но не с каким файлом самой папки spk1.
Построить кортеж помогает код:
for root, dirs, files in os.walk('Voices/'):
res = list(combinations(files, 2)) # получаем списки кортежей: [(файл 1, файл 2), (файл 1, файл 3)...(файл 3, файл 4)]
Однако здесь я получаю пары из файлов одной и той же папки (spk1, spk2 и spk3). Мне же требуется обратная ситуация.
Структура папок (стрелками показал, как мне необходимо строить кортежи - и так по всем директориям spk и всех их файлам):
Ответы (2 шт):
Я пока что придумал только такое решение проблемы:
from itertools import product, chain
from os import walk
all_files = dict()
for root, dirs, files in walk("Voices/"):
all_files[root] = files
for root in all_files.copy():
files = all_files[root]
del all_files[root]
other_files = list(chain(*[all_files[key] for key in all_files]))
result = list(product(files, other_files))
print(result)
Оно не самое оптимальное по ресурсам, если файлов/папок будет очень много, то его надо будет доработать.
как то не совсем понятно, но возможно речь идет об этом:
from os import walk
from itertools import product, chain
top = r'C:\temp\test' # путь к папкам
_, sampl, *tests = [f for _,_,f in walk(top)] # первую папку пропускаем (нет файлов), вторая - образцы
res = list(product(sampl, chain(*tests))) # пары (файл образец + файл из других папок)
