Я предполагаю, что когда вы говорите «объединить это», вы хотите, чтобы все строки с одинаковым индексом были сгруппированы вместе.Не объединены, как furas, используя zip
.
Также не ясно, хотите ли вы, чтобы каждый набор сгруппированных индексов был в отдельных файлах или все результаты в одном файле.Мое решение записывает все строки из входных файлов в один файл, но их будет несложно разделить.
Вместо того, чтобы пытаться читать данные и комбинировать их одновременно, явыбрал для чтения всех данных и сортировки их в памяти.Вы говорите, что файлы содержат 20 строк для каждой группы, а количество групп может достигать 100, поэтому у вас есть небольшой набор данных, который легко обрабатывается в памяти.
Код будет искать любые файлы .txt
во входном пути загрузите строки как массивы, а затем отсортируйте массивы по второму элементу.Наконец, все строки преобразуются обратно в строки с разделителями табуляции и записываются в файл.
Это решение также будет обрабатывать любое количество входных файлов с помощью os.walk
и по-прежнему работать в ситуациях, когда имеются неполные наборы;например, нет 20 строк индекса 2
import os
import re
input_path = './input/'
combined = []
# r=root, d=directories, f = files
for r, d, f in os.walk(input_path):
for file in f:
if '.txt' in file:
with open(os.path.join(input_path, file), 'r') as input_file:
for line in input_file:
combined.append(re.split('\s+', line.strip()))
combined.sort(key=lambda x: x[1])
with open('output.txt', 'w+') as output_file:
for line in combined:
output_file.write("\t".join(line)+'\n')