Я пытаюсь выполнить эту задачу весь день, и я действительно хочу научиться делать это с помощью Python. Я хочу взять два файла с разделителями табуляции, один с идентификатором, а другой с тем же идентификатором и некоторым описанием. Я могу легко объединить эти файлы в поле shared ID с unix join, но для этого мне нужно отсортировать оба, и я хочу сохранить порядок первого файла.Python: Сортировка двух файлов на основе порядка
Ive пробовал код ниже, и мой метод заключался в том, чтобы попытаться добавить вещи в кортеж, поскольку, насколько я понимаю, они будут соблюдать порядок, когда вы добавляете к нему. Тем не менее, я не мог заставить все работать. Может ли кто-нибудь помочь?
Примеры файлов:
file1 ->
111889
1437390
123
27998
2525778
12
1345
file2 ->
2525778'\t'item778
1345'\t'item110
123'\t'item1000
12'\t'item8889
111889'\t'item1111
1437390'\t'item222
27998'\t'item12
output ->
111889'\t'item1111
1437390'\t'item222
123'\t'item1000
27998'\t'item12
2525778'\t'item778
12'\t'item8889
1345'\t'item110
Это то, что я до сих пор:
import sys
add_list =()
with open(sys.argv[1], 'rb') as file1, open(sys.argv[2], 'rb') as file2:
for line2 in file2:
f1, f2, f3 = line2.split('\t')
#print f1, f2, f3
for row in file1:
#print row
if row != f1:
break
else:
add_list.append(f1,f2,'\n')
break
Насколько велики вы ожидаете, что ваши файлы будут? Можно ли предположить, что все они могут быть прочитаны в памяти одновременно? Если нет, то для этого потребуются более сложные внешние методы ... – lightalchemist
Кортеж неизменен (не может быть изменен), и вы не можете добавить его. Вы хотите использовать список, '[]'. Кроме того, '.append()' принимает только один элемент. – monkut
Действительно, ваша алгоритмическая сложность - O (n^2), что означает, что для входного набора из n элементов он обрабатывает все элементы n^2 раза. Слияние, особенно если это можно сделать в памяти, это сложность O (n) (с использованием словарного подхода). Для 1000 предметов это означает, что оно на 3 порядка быстрее. –