2014-11-12 1 views
2

나는 fasta 형식의 DNA 서열 데이터로 작업 중이며 생물체의 이름과 서열을 포함하는 2 개의 목록을 작성해야합니다. 다음 게시물 Add multiple sequences from a FASTA file to a list in python에 걸쳐 왔지만 솔루션이 제대로 작동하지 않습니다 (아직 댓글을 달 수 없습니다).여러 개의 fasta 파일에서 생물체 및 DNA 서열 데이터 목록 만들기

fasta 파일은 다음 형식을 사용하는 txt 파일입니다. 유기체 이름을 표시하는 ">"로 시작하는 한 줄. 그 다음에 시퀀스 데이터가있는 여러 줄이옵니다.

> Organism1
ACTGATGACTGATCGTACGT
ATCGATCGTAGCTACGATCG
ATCATGCTATTGTG
> Organism2
TACTGTAGCTAGTCGTAGCT
ATGACGATCGTACGTCGTAC
TAGCTGACTG
...

: FASTA시 파일은 여러 생물 각각의 블록 구성을 포함 할 수 있습니다 위 링크의 도움으로 작성한 코드는 다음과 같습니다.

data_file = open("multitest.fas","r") 
data_tmp = [] 
a=[] #list for organisms name 
b=[] #list for sequence data 
for line in data_file: 
    line = line.rstrip() 
    line = line.strip("\n").strip("\r") 
    for i in line: 
     if line[0] == ">": 
      a.append(line[1:]) 
      if data_tmp: 
       b.append("".join(data_tmp)) 
       data_tmp=[] 
      break 
     else: 
      line=line.upper() 
    if all([k==k.upper() for k in line]): 
     data_tmp.append(line) 
print a 
print b 

마지막 생물의 서열이 목록 b에 추가되지 않는 것을 제외하고 코드는 정상적으로 작동합니다. 이것은 ">"가 발생할 때만 순서 데이터가 추가되기 때문에 명백합니다. 마지막 순서가 추가되었는지 어떻게 확인할 수 있습니까? 그리고 왜 다른 사람도 위의 링크 코드에서 동일한 문제를 겪지 않았습니까? 어떤 조언을 주셔서 감사합니다!

+0

if data_tmp : b.append ("". join (data_tmp))'* 외부 * 'for' 루프를 반복해야합니다. – jonrsharpe

+0

@jonrsharpe 그건, 사실, 논리이고 그것은 지금 작동합니다. 감사! – mahada

답변

0

나는 Regex로 해냈다. 희망이 있으면 도움이 될 것입니다.

>>> import re 
>>> data_file = open("multitest.fas","r") 
>>> data=data_file.read() 
>>> org=re.findall(r'>(\w*)',data) 
>>> org 
['Organism1', 'Organism2'] 
>>> seq=[i.replace('\n','') for i in re.split(r'>\w*',data,re.DOTALL)[1:]] 
>>> seq 
['ACTGATGACTGATCGTACGTATCGATCGTAGCTACGATCGATCATGCTATTGTG', 'TACTGTAGCTAGTCGTAGCTATGACGATCGTACGTCGTACTAGCTGACTG'] 
+0

고마워요! 이것은 트릭을 할 것으로 보인다. 나는 다른 파일들과 함께 작업하기 위해 \ r 줄 바꿈을 대체했다 .seq = [i.replace ('\ n', ''). replace ('\ r', '') for i in re.split (r '> \ w *', data, re.DOTALL) [1 :]]' – mahada

+0

도움이된다면 대답을 받아들이면 좋을 것입니다. –

관련 문제