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

2024-09-29 19:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

unique.txt文件包含:2列,列之间用tab分隔。total.txt文件包含:3列,每列用tab分隔。你知道吗

我从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(满足if条件的第一列的值)。我想如果unique.txt == ith的第j个total.txt的第j个,那么就写第i行总计.txt输入新文件。你知道吗


Tags: 文件txtoutputlinecolumnopencontentall
2条回答

我将用以下方式编写您的代码:

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()

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, []))

相关问题 更多 >

    热门问题