我有一个正在阅读文件的程序'侧翼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:染色体编号,第二个col:DNA链,第三个col:DNA中终止密码子的位置,第四个col:终止密码子,第五个col:终止密码子周围上游和下游的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')
答案 0 :(得分:2)
您的outfile.write
发生在for line in infile
循环之外,因此stopcodon
的值始终是输入文本文件最后一行中的值。
如果您尝试将序列计数与终止密码子和侧翼序列相关联,则需要将两个变量用作关键字。如果你不提前知道所有的终止密码子,你将无法使用“多个嵌套for循环”方法将sequenceCount
的值初始化为0,所以你应该使用defaultdict。 / p>
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')
答案 1 :(得分:0)
当您生成输出时,无论前一循环中使用stopcodon
的值是什么,都会打印从文件中读取的最后一行stopcodon
。也许您的sequenceCount
字典需要通过stopcodon
和flankseq
的组合编制索引?