2013-09-01 39 views
1

我有兩個製表符分隔的文件,我需要測試第一個文件中的每一行對其他文件中的所有行。例如,輸出總是給最後一行或所有行

文件1:

row1 c1 36 345 A 
row2 c3 36 9949 B 
row3 c4 36 858 C 

文件2:

row1 c1 3455 3800 
row2 c3 6784 7843 
row3 c3 10564 99302 
row4 c5 1405 1563 

比方說,我想輸出(文件1)對於這山坳[3]文件1的小於所有行考慮到col [1]是相同的,file2的任何(不是每個)col [2]。

預期輸出:

row1 c1 36 345 A 
row2 c3 36 9949 B 

因爲我在Ubuntu的工作,我想輸入的命令是這樣的: 蟒蛇code.py [文件1] [文件2]> [輸出]

我寫了下面的代碼:

import sys 

filename1 = sys.argv[1] 
filename2 = sys.argv[2] 

file1 = open(filename1, 'r') 

done = False 

for x in file1.readlines(): 
    col = x.strip().split() 
    file2 = open(filename2, 'r') 
    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 

基本上我總是隻得到嵌套循環中條件爲真的最後一行。我嘗試這樣做,而不是:

if done == True: print x 

(有一個缺口),但現在,它打印中的所有行文件1,無論在之前的循環測試的條件。 (> _ <)

回答

3

您忘了在第一次匹配後重置done變量,並且在這種情況下您不需要變量。要修復代碼,只需將done = True替換爲print x,然後使用int(col[3]) < int(col2[2])將列作爲數字(整數)進行比較。

相關問題