使用python拼接文本文件的一行

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)

这个输出表明它没有遍历字符串中的每个字符...请帮忙!

Cra*_*den 6

您需要在循环之前移动indexDnaID声明,否则它们将在每次循环迭代时重置:

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)