python循环不等的列表行

时间:2015-09-26 06:10:39

标签: python

我有两个包含不等数量行和列的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的第1列和第2列与test2.txt的第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]

此代码以test2.txt第1列的多倍长度打印test1.txt的第1列。我知道在最后的if和else条件中有一些错误。

1 个答案:

答案 0 :(得分: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, "")
相关问题