小编典典

使用Python对DNA链进行反向互补

python

我有一个DNA序列,并希望使用Python对其进行反向补充。它在CSV文件的一列中,我想将反向补语写入同一文件中的另一列。棘手的部分是,除了A,T,G和C之外,还有一些单元格。我能够用这段代码进行反向补码:

def complement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    bases = list(seq) 
    bases = [complement[base] for base in bases] 
    return ''.join(bases)
    def reverse_complement(s):
        return complement(s[::-1])

    print "Reverse Complement:"
    print(reverse_complement("TCGGGCCC"))

但是,当我尝试使用下面的代码查找补语词典中不存在的项目时,我只会得到最后一个底数的补语。它不会迭代。我想知道如何解决它。

def complement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    bases = list(seq) 
    for element in bases:
        if element not in complement:
            print element  
        letters = [complement[base] for base in element] 
        return ''.join(letters)
def reverse_complement(seq):
    return complement(seq[::-1])

print "Reverse Complement:"
print(reverse_complement("TCGGGCCCCX"))

阅读 215

收藏
2021-01-20

共1个答案

小编典典

get如果键不在词典中,则词典的方法允许您指定默认值。作为预处理步骤,我会将所有非“
ATGC”碱基映射为单个字母(或标点符号或数字或序列中不会显示的任何内容),然后反转序列,然后将单个字母替换为原始字母。另外,您可以先将其反转,然后搜索并替换sniins

alt_map = {'ins':'0'}
complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}

def reverse_complement(seq):    
    for k,v in alt_map.iteritems():
        seq = seq.replace(k,v)
    bases = list(seq) 
    bases = reversed([complement.get(base,base) for base in bases])
    bases = ''.join(bases)
    for k,v in alt_map.iteritems():
        bases = bases.replace(v,k)
    return bases

>>> seq = "TCGGinsGCCC"
>>> print "Reverse Complement:"
>>> print(reverse_complement(seq))
GGGCinsCCGA
2021-01-20