bro*_*ick 5 python bioinformatics
我正在尝试创建遗传签名.我有一个充满DNA序列的文本文件.我想从文本文件中读取每一行.然后将4个4个碱基的4mer加入字典中.例如:样本序列
ATGATATATCTATCAT
我想要添加的是ATGA,TGAT,GATA等等.在添加4mers时ID增加1的字典中.
所以字典会举行......
Genetic signatures, ID
ATGA,1
TGAT, 2
GATA,3
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所拥有的......
import sys
def main ():
readingFile = open("signatures.txt", "r")
my_DNA=""
DNAseq = {} #creates dictionary
for char in readingFile:
my_DNA = my_DNA+char
for char in my_DNA:
index = 0
DnaID=1
seq = my_DNA[index:index+4]
if (DNAseq.has_key(seq)): #checks if the key is in the dictionary
index= index +1
else :
DNAseq[seq] = DnaID
index = index+1
DnaID= DnaID+1
readingFile.close()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
ACTC
ACTC
ACTC
ACTC
ACTC
ACTC
Run Code Online (Sandbox Code Playgroud)
这个输出表明它没有遍历字符串中的每个字符...请帮忙!
您需要在循环之前移动index和DnaID声明,否则它们将在每次循环迭代时重置:
index = 0
DnaID=1
for char in my_DNA:
#... rest of loop here
Run Code Online (Sandbox Code Playgroud)
完成更改后,您将获得此输出:
ATGA 1
TGAT 2
GATA 3
ATAT 4
TATA 5
ATAT 6
TATC 6
ATCT 7
TCTA 8
CTAT 9
TATC 10
ATCA 10
TCAT 11
CAT 12
AT 13
T 14
Run Code Online (Sandbox Code Playgroud)
为了避免最后3个不正确长度的项目,您可以修改循环:
for i in range(len(my_DNA)-3):
#... rest of loop here
Run Code Online (Sandbox Code Playgroud)
这不会循环显示最后3个字符,从而产生输出:
ATGA 1
TGAT 2
GATA 3
ATAT 4
TATA 5
ATAT 6
TATC 6
ATCT 7
TCTA 8
CTAT 9
TATC 10
ATCA 10
TCAT 11
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |