我有一个fasta文件。从该文件中,我需要获得包含'CCNNNGG'
的唯一序列(其中'N'
表示随机核苷酸)并将它们放入新的fasta文件中。
示例(它应该输出第一个序列):
m121012_054644_42133_c100390582550000001523038311021245_s1_p0 / 7 / 3312_3597 CGCGGCATCGAATTAATACGACTCACTATAGGTTTTTTTATTG ********* CCTACGG *********** GTATTTTCAGTTAGATTCTTTCTTCTTAGAGGGTACAGAGAAAGGGAGAAAATAGCTACAGACATGGGAGTGAAAGGTAGGAAGAAGAGCGAAGCAGACATTATTCA
m121012_054644_42133_c100390582550000001523038311021245_s1_p0 / 7 / 3708_4657 CAACGGTTTTGCCACAAGATCAGGAACATAAGTCACCAGACTCAATTCATCCCCATAAGACCTCGGACCTCTCAATCCTCGAATTAGGATGTTCTCGTACGGTCTATCAGTATATAAACCTGACATACTATAAAAAAGTATACCAT TCTTATCATGTACAGTAGGGTACAGTAGG
(*
s已添加以突出显示)
我的代码:
from Bio import SeqIO
my_sequences = []
for record in SeqIO.parse(open("example.fa", "rU"), "fasta") :
if "CCTACGG" in record.seq : #Works fine with CCTACGG
my_sequences.append(record)
output_handle = open("my_seqs.fasta", "w")
SeqIO.write(my_sequences, output_handle, "fasta")
output_handle.close()
我的问题是,我不知道如何编写随机核苷酸,而不是在"CCTACGG"
之后写if
我要'CCNNNGG'
N
,'C'
代表随机核苷酸('T'
或'G'
或'A'
或{{1}})。
答案 0 :(得分:2)
您可以使用正则表达式通过Python的re
module:
import re
pattern = 'CCNNNGG'
regex = re.compile(pattern.replace('N', '[ACGT]'))
for record in SeqIO.parse(...):
if re.search(regex, record.seq) is not None:
my_sequences.append(record)
这会将您的模式中的每个'N'
替换为'[ACGT]'
,它将匹配这四个字符中的任何一个,然后在每个record.seq
中搜索该模式。
另外,请注意您的示例不是很好 - 第二个也匹配该模式(它包含'CCCATGG'
) - 请参阅results!