Mam dwa pliki rozdzielane tabulatorami i muszę przetestować każdy wiersz w pierwszym pliku względem wszystkich wierszy w drugim pliku. Na przykład,jak wyrwać tylko jedną zagnieżdżoną pętlę
plik1:
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
powiedzmy chciałbym wyjściowe wszystkich wierszy (pliku1), dla którego col [3] pliku1 jest mniejsza dowolny (nie każdy) col [2] pliku 2, biorąc pod uwagę, że col [1] są takie same.
wyjście z oczekiwaniami:
row1 c1 36 345 A
row2 c3 36 9949 B
Odkąd pracuję w Ubuntu, chciałbym polecenia wejściowego wyglądać następująco:
python code.py [file1] [file2] > [output]
Napisałem następujący kod:
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
Jednak wynik wygląda następująco:
row2 c3 36 9949 B
Jest to oczywiste dla większych zestawów danych, ale zasadniczo zawsze otrzymuję tylko ostatni wiersz, dla którego warunek w zagnieżdżonej pętli był prawdziwy. Podejrzewam, że "przerwa" wyrywa mnie z obu pętli. Chciałbym wiedzieć (1), jak wyrwać się z jednej z pętli for i (2), jeśli jest to jedyny problem, jaki mam tutaj.
'break' tylko dzieli cię z najbardziej wewnętrzną pętlą. –
Powiązane: [Porównaj dwa pliki i napisz do nowego pliku, ale wypisz tylko kilka linii?] (Http://stackoverflow.com/questions/18514979/compare-two-files-and-write-to-a-new- file-but-only-output-a-few-lines) –