У меня есть два файла с разделителями табуляции, и мне нужно проверить каждую строку в первом файле по всем строкам в другом файле. Например,
file1:
row1 c1 36 345 A
row2 c3 36 9949 B
row3 c4 36 858 C
file2:
row1 c1 3455 3800
row2 c3 6784 7843
row3 c3 10564 99302
row4 c5 1405 1563
скажем, я хотел бы вывести все строки в файле (file1), для которых col [3] файла1 меньше любого (не каждого) col [2] файла2, учитывая, что col [1] одинаковы.
Ожидаемый результат:
row1 c1 36 345 A
row2 c3 36 9949 B
Так как я работаю в Ubuntu, я бы хотел, чтобы команда ввода выглядела так: python code.py [file1] [file2] > [output]
Я написал следующий код:
import sys
filename1 = sys.argv[1]
filename2 = sys.argv[2]
file1 = open(filename1, 'r')
file2 = open(filename2, 'r')
done = False
for x in file1.readlines():
col = x.strip().split()
for y in file2.readlines():
col2 = y.strip().split()
if col[1] == col2[1] and col[3] < col2[2]:
done = True
break
else: continue
print x
Однако вывод выглядит следующим образом:
row2 c3 36 9949 B
Это видно для больших наборов данных, но в основном я всегда получаю только последнюю строку, для которой условие в вложенном цикле было истинным. Я подозреваю, что "ломать" ломает меня из обеих петель. Я хотел бы знать (1), как вырваться из одного из циклов for, и (2) если это единственная проблема, которую я получил здесь.