2015-09-26 92 views
0

我有兩個tex文件包含不同數量的行和列。現在我想將一個tex文件中的列表與其他文件進行比較,如果它與其他文件中的列表匹配,則打印相應的編號。對於例如我的文件看起來像蟒蛇循環不等列表行

test1.txt  test2.txt 

XCJ2200, B  XCJ1945, A, 0.1 
XCJ2345, E  XCJ2200, B, 0.2 
XCJ2568, F  XCJ2450, C, 0.3 
....   XCJ2590, D, 0.4 
       XCJ3000, E, 0.4 
       .... 

所以,現在我想匹配test1.txt的col 1和2與test2.txt的col 1和2。所以我想最終的輸出

XCJ2200 0.2 
XCJ2345 0.4 
XCJ2568 
.... 

到目前爲止,我已經寫了下面的代碼,但它不給答案,因爲我想:

reader1=csv.reader(open('test1.txt','rb')) 
reader2=csv.reader(open('test2.txt','rb')) 
col1=[];col2=[];Col1=[];Col2=[];Col3=[] 
for row in reader1: 
    col1.append((row[0])) 
    col2.append((row[1])) 
for row in reader2: 
    Col1.append((row[0])) 
    Col2.append((row[1])) 
    Col3.append((row[2])) 
for i in range(len(col1)): 
    for j in range(len(Col1)): 
    if Col1[j]==col1[i] or Col2[j]==col1[i]: 
     print col1[i],Col3[j] 
    else: 
     print col1[i] 

此代碼打印test1.txt的山坳的1在多次test2.txt的列1的長度。我知道在最後的if和else條件中有錯誤。

+0

你可以附加什麼代碼打印出來嗎?或者它的樣本? 另外,我不明白'Col2 [j] == col1 [i]'會如何返回true。我認爲你的意思是'Col2 [j] == col2 [i]' – WhiteTiger

+0

是的你是對的。它是Col2 [j] == col2 [i]。此代碼是給我XCJ2200 XCJ2200 0.2 XCJ2200 XCJ2200 XCJ2345 XCJ2345 XCJ2345 0.3 XCJ2345 –

回答

2

可能最容易做的事情之一是將test2.txt讀入可以用來查找元組(row [0],row [1])的字典中。使用dict.get()可以指定一個默認的「」:

with open('test2.txt', 'rb') as f: 
    reader = csv.reader(f) 
    lookup = {(row[0], row[1]): row[2] for row in reader} 
with open('test1.txt', 'rb') as f: 
    reader = csv.reader(f) 
    data = [(row[0], row[1]) for row in reader] 
for d in data: 
    print d[0], lookup.get(d, "") 
+0

是的,這就是我想要的。 –

+0

對不起,我忘了提及這段代碼沒有檢查我的其他條件,即'Col2 [j] == col2 [i]'。 –

+0

你能修改你的代碼嗎? –