通过使用if条件改进我的python程序来获取所需的行

时间:2014-08-23 15:10:06

标签: python

unique.txt文件包含:2列,其中列由制表符分隔。 total.txt文件包含:每列3列,以制表符分隔。

我从unique.txt文件中获取每一行,并在total.txt文件中找到该行。如果存在,则从total.txt中提取整行并将其保存在新的output文件中。

###Total.txt
column a        column b                    column c         
interaction1    mitochondria_205000_225000  mitochondria_195000_215000   
interaction2    mitochondria_345000_365000  mitochondria_335000_355000    
interaction3    mitochondria_345000_365000  mitochondria_5000_25000      
interaction4    chloroplast_115000_128207   chloroplast_35000_55000    
interaction5    chloroplast_115000_128207   chloroplast_15000_35000    
interaction15   2_10515000_10535000 2_10505000_10525000

###Unique.txt
column a                    column b      
mitochondria_205000_225000  mitochondria_195000_215000        
mitochondria_345000_365000  mitochondria_335000_355000    
mitochondria_345000_365000  mitochondria_5000_25000     
chloroplast_115000_128207   chloroplast_35000_55000    
chloroplast_115000_128207   chloroplast_15000_35000    
mitochondria_185000_205000  mitochondria_25000_45000    
2_16595000_16615000 2_16585000_16605000    
4_2785000_2805000   4_2775000_2795000    
4_11395000_11415000 4_11385000_11405000   
4_2875000_2895000   4_2865000_2885000   
4_13745000_13765000 4_13735000_13755000

我的计划:

file=open('total.txt')

file2 = open('unique.txt')
all_content=file.readlines()
all_content2=file2.readlines()
store_id_lines = []
ff = open('match.dat', 'w')

for i in range(len(all_content)):
              line=all_content[i].split('\t')
              seq=line[1]+'\t'+line[2]
              for j in range(len(all_content2)):
                     if all_content2[j]==seq:
                           ff.write(seq)
                           break 

问题:
但是给予欲望output的istide(满足if条件的第1列的值)。我知道如果unique.txt == ith的{​​{1}}的第j个然后将total.txt的第i行写入新文件中。

2 个答案:

答案 0 :(得分:0)

我将以这种方式编写代码:

file=open('total.txt')
list_file = list(file)
file2 = open('unique.txt')
list_file2 = list(file2)
store_id_lines = []
ff = open('match.dat', 'w')

for curr_line_total in list_file:
    line=curr_line_total.split('\t')
    seq=line[1]+'\t'+ line[2]
    if seq in list_file2:
        ff.write(curr_line_total)

请在打开文件时避免 readlines()并使用 with 语法。

Here解释了为什么您不需要使用readlines()

答案 1 :(得分:0)

import csv

with open('unique.txt') as uniques, open('total.txt') as total:
    uniques = list(tuple(line) for line in csv.reader(uniques))
    totals = {}
    for line in csv.reader(total):
        totals[tuple(line[1:])] = line

with open('output.txt', 'w') as outfile:
    writer = csv.writer(outfile)
    for line in uniques:
        writer.writerow(totals.get(line, []))