2017-03-21 11 views
-1

을 열거 시작할 생각인가?분할 문구 텍스트와 내가이 순서가 그들에게

감사합니다.

+1

1 단계 :'파서 FASTA 파일 biopython'. 그것은 좋은 방법입니다. –

+1

두 번째 단계 :'split' 함수 또는'regex'를 사용하십시오 –

+1

세 번째 단계는 저장을 위해''biopython'을 사용하고 출력은 –

답변

4

간단한 방법은 각 "X"문자에 첫번째 분할에, 그리고 다음 빈 결과 필터링 것 : 여기

sequences = filter(None, my_sequence.split("x")) 
만 truthy-값을 유지하는 수단을 필터링 할 None 인수를 - 빈 문자열은 false으로 처리되므로 결과에서 제거됩니다.

참고 : 반복자를 반환 filter 파이썬 3에서, 그래서 당신은 목록, 사용하려는 경우 : 예를 들어

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

:

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

또 다른 해결책은 정규 표현식을 사용하는 것입니다 . 시퀀스 사이에 가변적 인 "x"문자가있는 경우 한 행에 하나 이상의 x와 일치하는 x+ 패턴으로 분할 할 수 있습니다. 당신은 당신이 정규 표현식을 사용할 수 XS의 각 시퀀스에 대한 단일 항목 갖고 싶어

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

파이썬 3 사용자를 위해'list'에 그 것을 던져 넣을 수 있습니까? –

+0

@ Ev.Kounis 완료 - 제안 해 주셔서 감사합니다! –

2

는 : 예를 들어

여기

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

r'x+'는 I가 원래 문자열을 분할 의미 하나 이상의 xs 시퀀스.

1

원하는 출력을 얻는 또 다른 방법은 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