2015-09-26 88 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

你能修改你的代码吗? –