程序没有给我输出我想
问题描述:
我有一个程序,正在读取文件“侧翼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
字典需要stopcodon
和flankseq
的组合索引?