2013-05-12 65 views
0

我有2个文本文件,从中我匹配的第二列txt1与第一列txt2之前|,以及我只是在下面提到,比我输出,如果他们是相同的,随着它的描述,一切都很好,但我没有得到输出中的new line discription,它只是显示了它的第一行。没有得到输出全文

这里是txt1.txt

E5 E7 Bat 

内容下面是txt2.txt内容:

?E7|E5 
Addsadsadsadsadsadsdasd 
Sdsdfsdfdsfdsfdfdsfdsfd 
AasadsaddccxcvcsAAGCAGT 

这是我使用

代码
with open('txt1.txt', 'rb') as file1: 
    #file1_data = dict(line.split()[1] for line in file1 if line.strip()) 
    file1_data = [line.split()[1] for line in file1 if line.strip()] 
#print file1_data 
with open('txt2.txt', 'rb') as file2, open('output.txt', 'wb') as outputfile: 
    output = "" 
    file2lines = file2.readlines() 
    for i in range(len(file2lines)): 
     line = file2lines[i] 
     if line[0] == '?': 
      row = line.strip().split('|') 
      key = row[0][1:] 
      if key in file1_data: 
       output += line + "\t" + file2lines[i+1] 
    outputfile.write(output) 
outputfile.close() 

Getting output

?E7|E5 
Addsadsadsadsadsadsdasd 

Required output

?E7|E5 
Addsadsadsadsadsadsdasd 
Sdsdfsdfdsfdsfdfdsfdsfd 
AasadsaddccxcvcsAAGCAGT 
+0

至少为我们提供了这些文件。 – CppLearner 2013-05-12 19:53:31

+0

@CppLearner我提供它,如果您看到,名称为txt1和txt2 – Rocket 2013-05-12 19:56:16

回答

1

我想你需要一些状态处理 - “匹配块”/ “不匹配块”。我已经重写了算法的第二部分:

with open('txt2.txt', 'rb') as file2, open('output.txt', 'wb') as outputfile: 
    output = [] 
    do_block = False 
    for line in file2: 
     line = line.rstrip() 
     if not line: continue 
     if line[0] == '?': 
      key = line.strip().split('|')[0][1:] 
      do_block = key in file1_data 
     if do_block: 
      output.append(line) 
    outputfile.write("\n".join(output))