여러 시퀀스를 포함하는 fasta 파일이 있으며 원하는 것은 각 시퀀스 끝에 64 N을 추가하는 것입니다.
다음은 입력 파일의 예입니다.
>164778
AATCTAGATTTGTGTTGAACAACCCTTGGTACAACAAATACTTGGCACTTTTATAACCCAACTGTATGGTATAATCGACA
TCTGTGTTATGAAAGGAACTTGATTTGTTGTTAACATAAGCAATCACCATGAATACCTGATAATATTTACAAGTATTGGC
ATTACTCGAATAAGATAATTAATGTAATCATGTTAACAATTTATAATCTAATTGAAACCTCCTTTGTGTGTGGTTTCCAA
TTGGGCAATAAGAGTTTATAC
>164779
AAATCACTTTCAGTGGAAAATTATAAAACCTATTAATTTATTGCCGGCCCTCAAATCAACGCAACCCAAAACCTATTAAT
TATAAAACCTATTAATTTATTTTTTCAATCAACTACGACTATTAATTATATTTGATGATAATGAATGAAATGACACCATG
GTTATATAAAAAATATGTCAAAAGCTATTCTTAATAGGGTTT
나는 이것을 꺼내고 싶다
>chr
AATCTAGATTTGTGTTGAACAACCCTTGGTACAACAAATACTTGGCACTTTTATAACCCAACTGTATGGTATAATCGACA
TCTGTGTTATGAAAGGAACTTGATTTGTTGTTAACATAAGCAATCACCATGAATACCTGATAATATTTACAAGTATTGGC
ATTACTCGAATAAGATAATTAATGTAATCATGTTAACAATTTATAATCTAATTGAAACCTCCTTTGTGTGTGGTTTCCAA
TTGGGCAATAAGAGTTTATACNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAATCACTTTCAGTGGAAAATTATAAAACCTATTAATTTATTGCCGGCCCTCAAATCAACGCAACCCAAAACCTATTAATTATAAAACCTATTAATTTATTTTTTCAATCAACTACGACTATTAATTATATTTGATGATAATGAATGAAATGACACCATG
GTTATATAAAAAATATGTCAAAAGCTATTCTTAATAGGGTTT
내가 지금 가지고있는 코드는 각 시퀀스의 끝이 아니라 각 줄의 끝에 N을 추가하는 것입니다.
import textwrap
result = list()
spacer = "N" * 64
with open ("join_fasta_test.fasta", 'r') as fh_in:
for line in fh_in:
line = line.strip()
if not line.startswith(">"):
result.append(line)
result.append(spacer)
print result
result2 = "".join(result)
print result2
result3 = '\n'.join(textwrap.wrap(result2, 80))
print result3
with open("join_fasta_test_out.fasta", 'w') as fh_out:
fh_out.write(">chr")
fh_out.write("\n")
fh_out.write(result3)
다음을 테스트 할 수있을 때까지 줄을 작성하는 것입니다. 이렇게하면 파일을 읽고 한 번에 쓸 수 있으며 모든 것을 메모리에 보관할 필요가 없습니다.
spacer = "N" * 64
with open ("join_fasta_test.fasta", 'r') as fh_in, \
open("join_fasta_test_out.fasta", 'w') as fh_out:
prev = next(fh_in) # first line
for line in fh_in:
if line.startswith('>'):
prev = prev.rstrip('\n') + spacer + '\n'
fh_out.write(prev)
prev = line
fh_out.write(prev.rstrip('\n') + spacer + '\n')
따라서 prev
항상 앞의 줄이며 '현재'줄을 검사 한 후에 만 작성되며 현재 줄이 >
.으로 시작하는 경우 스페이서에 추가됩니다 .
데모:
>>> from cStringIO import StringIO
>>> sample = '''\
... >164778
... AATCTAGATTTGTGTTGAACAACCCTTGGTACAACAAATACTTGGCACTTTTATAACCCAACTGTATGGTATAATCGACA
... TCTGTGTTATGAAAGGAACTTGATTTGTTGTTAACATAAGCAATCACCATGAATACCTGATAATATTTACAAGTATTGGC
... ATTACTCGAATAAGATAATTAATGTAATCATGTTAACAATTTATAATCTAATTGAAACCTCCTTTGTGTGTGGTTTCCAA
... TTGGGCAATAAGAGTTTATAC
... >164779
... AAATCACTTTCAGTGGAAAATTATAAAACCTATTAATTTATTGCCGGCCCTCAAATCAACGCAACCCAAAACCTATTAAT
... TATAAAACCTATTAATTTATTTTTTCAATCAACTACGACTATTAATTATATTTGATGATAATGAATGAAATGACACCATG
... GTTATATAAAAAATATGTCAAAAGCTATTCTTAATAGGGTTT
... '''
>>> spacer = "N" * 64
>>> fh_in = iter(sample.splitlines(True))
>>> fh_out = StringIO()
>>> prev = next(fh_in) # first line
>>> for line in fh_in:
... if line.startswith('>'):
... prev = prev.rstrip('\n') + spacer + '\n'
... fh_out.write(prev)
... prev = line
...
>>> fh_out.write(prev.rstrip('\n') + spacer + '\n')
>>> print fh_out.getvalue()
>164778
AATCTAGATTTGTGTTGAACAACCCTTGGTACAACAAATACTTGGCACTTTTATAACCCAACTGTATGGTATAATCGACA
TCTGTGTTATGAAAGGAACTTGATTTGTTGTTAACATAAGCAATCACCATGAATACCTGATAATATTTACAAGTATTGGC
ATTACTCGAATAAGATAATTAATGTAATCATGTTAACAATTTATAATCTAATTGAAACCTCCTTTGTGTGTGGTTTCCAA
TTGGGCAATAAGAGTTTATACNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
>164779
AAATCACTTTCAGTGGAAAATTATAAAACCTATTAATTTATTGCCGGCCCTCAAATCAACGCAACCCAAAACCTATTAAT
TATAAAACCTATTAATTTATTTTTTCAATCAACTACGACTATTAATTATATTTGATGATAATGAATGAAATGACACCATG
GTTATATAAAAAATATGTCAAAAGCTATTCTTAATAGGGTTTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다