2017-03-21 19 views
-1

我有这样的顺序:拆分文本的短语和一一列举

 
>my_sequence 
atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcactxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc 

我想拆分此长序列消除“XXXXX”,创造分离顺序是这样的:

 
>1 
atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact 
>2 
cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa 
>3 
ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc 

有谁有什么想法开始?

谢谢。

+1

第一步骤:'用于biopython'解析器FASTA文件。这是一个好方法 –

+1

第二步:使用'split'函数或'regex' –

+1

第三步,使用'biopython'保存并格式化输出 –

回答

4

一个简单的方法是将在每个“X”字符首先分裂,然后滤出空的结果:

sequences = filter(None, my_sequence.split("x")) 

这里,None参数滤波器装置只保持truthy值 - 空字符串被视为false,因此它们将从结果中删除。

注:在Python 3,filter返回一个迭代器,所以如果你想有一个列表,使用:

sequences = list(filter(None, my_sequence.split("x"))) 

例如:

In [5]: filter(str, my_sequence.split("x")) 
Out[5]: 
['atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact', 
'cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa', 
'ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc'] 

另一种解决方案是使用正则表达式。如果在序列之间有可变数量的“x”字符,则可以在x+模式上进行拆分,该模式与连续匹配一个或多个x。

例如:

In [6]: import re 
In [7]: p = re.compile(r'x+') 
In [8]: p.split(my_sequence) 
Out[8]: 
['atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact', 
'cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa', 
'ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc'] 
+2

你可以将它转换为Python 3用户的'list'吗? –

+0

@ Ev.Kounis完成 - 感谢您的建议! –

2

如果你想为XS的每个序列的单个条目,你可以使用正则表达式:

import re 
x = 'atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcactxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaaxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtcc 
agacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc' 
re.split(r'x+', x) 
>['atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact', 
'cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa', 
'ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc'] 

这里r'x+'意味着我将在分割原始字符串一个或多个xs的序列。

1

让期望的输出使用list comprehension的另一种方法是使用list comprehension

这是一个例子:

# Or maybe a generator 
# data = (k for k in my_sequence.split("x") if k) 
data = [k for k in my_sequence.split("x") if k] 

for k,v in enumerate(data): 
    print("{0} >>> {1}".format(k,v)) 

输出:

0 >>> atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact 
1 >>> cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa 
2 >>> ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc