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