我有两个包含不等数量行和列的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列。我知道最后一个循环条件有问题。请让我知道这个问题的可能解决方案。
答案 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)