python访问不相等的行和列

时间:2015-09-29 13:41:50

标签: python

我有两个包含不等数量行和列的tex文件。现在我想将一个tex文件的列表与其他文件进行比较,如果匹配,则打印相应的数字。对于例如我的两个文件看起来像

test1.txt       test2.txt

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

我想将test1.txt的第1列和第2列与test2.txt的第1列和第2列匹配,并希望得到以下最终输出

XCJ2200 0.2
XCJ2345 0.5
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]==col2[i]:
     print col1[i],Col3[j]
  else:
    print col1[i]

此代码给出了以下输出

  XCJ2200
  XCJ2200 0.2
  XCJ2200
  XCJ2200
  XCJ2200
  XCJ2345
  XCJ2345
  XCJ2345
  XCJ2345
  XCJ2345 0.5
  XCJ2568
  XCJ2568
  XCJ2568
  XCJ2568
  XCJ2568

此代码以test2.txt第1列的多倍长度打印test1.txt的第1列。我知道最后一个循环条件有问题。请让我知道这个问题的可能解决方案。

2 个答案:

答案 0 :(得分:1)

test1.txt的

XCJ2200,
XCJ2345,E
XCJ2568,F

的test2.txt

XCJ1945,A,0.1
XCJ2200,B,0.2
XCJ2450,C,0.3
XCJ2590,D,0.4
XCJ3000,E,0.5

import csv

data1 = list(csv.reader(open('test1.txt','rb')))
data2 = list(csv.reader(open('test2.txt','rb')))

for d in data1:
    lookup = [x for x in data2 if any(z in x for z in d)]
    print '{0} {1}'.format(d[0], lookup[0][2] if lookup else '')

答案 1 :(得分:0)

您的规范需要一些说明,但这可能会满足您的需求。请试一试。我希望代码可能会给你一些关于编写代码的简单方法的想法。

import csv


with open('test1.txt') as f:  # this avoids the trouble of remembering to close files
    data1_ids, data1_letters = zip(*csv.reader(f))
with open('test2.txt') as f:
    data2_ids, data2_letters, data2_numbers = zip(*csv.reader(f))


for i, (data1_id, data1_letter) in enumerate(zip(data1_ids, data1_letters)):
    if (data1_id in data2_ids) or (data1_letter in data2_letters):
        print('{} {}'.format(data1_id, data2_numbers[i]))
    else:
        print(data1_id)