답변
간단한 방법은 각 "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']
파이썬 3 사용자를 위해'list'에 그 것을 던져 넣을 수 있습니까? –
@ Ev.Kounis 완료 - 제안 해 주셔서 감사합니다! –
는 : 예를 들어
여기
import re
x = 'atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcactxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaaxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtcc
agacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc'
re.split(r'x+', x)
>['atccagcaaaaacgctccaaggattctcgactggactcattacttaatcagtattcgcaagcggacgccgaggtcgtaaaggctgaaaccgcacaatcggatgcgcccagtgatgacgcact',
'cgccttgcccacccaccgacaaccggtgagtgaaaaattggaacggtgattaaa',
'ttgtgctttatttctggagggcggtgtttaggggtaggcgcgccatgttttttgccttcagcgatcccaggtacaaccagtccccatattcgcgcactgtcgtgatcggcgagtaattacctgtgctcgcatcttgcaggttggcaatcaccttgccgtccaagtccagacccagtgcaaaggcacgcttttccatgggtttgggcagtaccgtcaatgcccgaacaatcattttgc']
을 r'x+'
는 I가 원래 문자열을 분할 의미 하나 이상의 xs 시퀀스.
원하는 출력을 얻는 또 다른 방법은 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
1 단계 :'파서 FASTA 파일 biopython'. 그것은 좋은 방법입니다. –
두 번째 단계 :'split' 함수 또는'regex'를 사용하십시오 –
세 번째 단계는 저장을 위해''biopython'을 사용하고 출력은 –