程序没有给我输出我想

问题描述:

我有一个程序,正在读取文件“侧翼seqs”包含文本列各不同的东西的意思:程序没有给我输出我想

1 1 44457990 TAA CTCTCCTAAAGGACC 
1 1 44461833 TGA CCAGCCTGAAGGGCT 
1 1 148594641 TAA CCACAATAAGCAGCT 
1 1 43241066 TGA ACTCACTGAGAGTGG 
1 1 43240880 TAG CTTCTCTAGGAATGG ... 

首先山坳:染色体数目,第二col:DNA链,第三列:DNA中终止密码子的位置,第四列:终止密码子,第五列:终止密码子周围的上游和下游6个碱基,即每个终止密码子的侧翼序列。

现在,我的程序应该读取此文件,并从侧翼序列列中提取每个终止密码子前后的3个碱基,并写入包含两列的文件:终止密码子,然后是侧翼序列。该文件应该包含所有三个终止密码子TAA,TAG和TGA的侧翼序列,但是当我运行该程序时,它只给出了TGA终止密码子的侧翼序列,但是对于其余的则没有。

这里是什么样的OUTFILE看起来像一个例子:

TGA GGGCTT 1 
TGA GAACGT 2 
TGA CTTCTT 17 
TGA CACCCT 15 
TGA GAACGG 1 
TGA GAACGC 3 

我看不到我要去的地方错了,但我不是很有经验,所以我敢肯定,我失去了一些东西简单。我很感激任何帮助发现我的错误!下面是代码:

bases = ['A','T','C','G'] 
sequenceCount = {} 
for x1 in bases: 
    for x2 in bases: 
     for x3 in bases: 
      for x4 in bases: 
       for x5 in bases: 
        for x6 in bases: 
         sequenceCount[x1+x2+x3+x4+x5+x6] = 0 
infile = open('flanking seqs.txt','rU') 
outfile = open('context resultsNEW.txt','w') 

for line in infile: 
    parts = line.split('\t') 
    chromosome = parts[0] 
    position = int(parts[2]) 
    stopcodon = parts[3] 
    flankseq = parts[4].strip() 
    flankseq = flankseq[3:6]+flankseq[9:12] 
    if flankseq in sequenceCount: 
     sequenceCount[flankseq] += 1  
for s in sequenceCount: 
    outfile.write(stopcodon+'\t'+s+'\t'+str(sequenceCount[s])+'\n') 

您的outfile.write发生在for line in infile循环之外,因此stopcodon的值始终为您在输入文本文件的最后一行中的值。

如果您尝试将序列计数与终止密码子和侧翼序列相关联,则需要将这两个变量用作关键字。如果您提前不知道所有终止密码子,则无法使用“多重嵌套for循环”方法将sequenceCount的值初始化为0,因此您应该使用defaultdict。

from collections import defaultdict 
sequenceCount = defaultdict(int) 

infile = open('flanking seqs.txt','rU') 
outfile = open('context resultsNEW.txt','w') 

for line in infile: 
    parts = line.split('\t') 
    chromosome = parts[0] 
    position = int(parts[2]) 
    stopcodon = parts[3] 
    flankseq = parts[4].strip() 
    flankseq = flankseq[3:6]+flankseq[9:12] 
    sequenceCount[flankseq, stopcodon] += 1 
for key, value in sequenceCount.iteritems(): 
    flankseq, stopcodon = key 
    outfile.write(stopcodon+'\t'+s+'\t'+str(sequenceCount[s])+'\n') 

当你出示你的输出,您打印从每行的文件读取的最后一个stopcodon,不管什么stopcodon值在前面的循环使用。也许你的sequenceCount字典需要stopcodonflankseq的组合索引?