2014-05-14 2 views
0

저는 fasta 파일이 있고 다른 파일에 위치가 포함되어 있습니다. 각 시퀀스의 특정 위치를 기본 설정 (예 : 위치 파일)으로 바꾸려고합니다. a/c 120처럼 보입니다. 교체 표가/c와 비슷해 보이므로 w로 대체 된 120 개의 위치로 새로운 fasta 파일을 가져오고 싶습니다. [: 3 0], 내가 시퀀스 이름을 가지고 dna 시퀀스 파일의 특정 위치에있는 뉴클레오티드를 바꿉니다

프로그램

그래서 첫 번째 문제는 내가 my_seq_id를 사용한 경우 나, 예를 들어, 정확한 위치를 얻을 수있다

파이썬

작성되었습니다! 시퀀스가 아니야. 위치 파일

from Bio import SeqIO 
import sys 
import string 
userInput1=raw_input("enter your sequence:") 
userInput2=raw_input('enter your position file:') 
fasta_file=userInput1 
position_file=userInput2 
result_file="outfile.txt" 
id_list=list() 
position_list=list() 
nucleotide_list=list() 
with open(position_file) as f: 
    for line in f: 
     line=line.strip() 
     headerline = line.split() 
     position=headerline[1] 
     ID=headerline[0] 
     nucleotide=headerline[2] 
     nucleotide_list.add(nucleotide) 
     position_list.add(position) 
     id_list.add(ID) 
fasta_sequence=SeqIO.parse(open(fasta_file), 'fasta') 
with open(result_file, 'w') as f: 
    if seq_record.id in wanted and nucleotide_list="A/C": 
     seq_record[position_list]="W\n" 
     SeqIO.write([seq_record], f, "fasta") 
+3

우리가 도와 줄 수 있도록 현재 구현 중 일부를 제공하십시오. SO는 귀하를 위해 귀하의 문제를 구현하는 것이 아니라 도움을주기 위해 존재합니다. 누군가가 당신을 위해 일하는 것에 관심이 있다면 [렌터 코더] (http://www.rent-acoder.com/)를 확인하십시오. – aglasser

+0

나는 c와 함께 갈지 잘 모르겠다. 아마도 bash/awk/perl 명령어들 : https://www.biostars.org/p/17680/ – Jiminion

+1

이 코드는 프로그래밍 언어 인 C와 비슷하지 않습니다. C-the-nucleotid와 C-the-language를 혼동하지 않을 것이라고 확신합니까 (CGAT에서와 같이)? – usr2564301

답변

0

귀하의 코드가 조금 혼란 ID1처럼 219 A/C를 보인다, 안 : 수

fasta_sequence=SeqIO.parse(open(fasta_file), 'fasta') 
with open(result_file, 'w') as f: 
    if seq_record.id in wanted and nucleotide_list="A/C": 
     seq_record[position_list]="W\n" 
     SeqIO.write([seq_record], f, "fasta") 

:

fasta_sequence=SeqIO.parse(open(fasta_file), 'fasta') 
with open(result_file, 'w') as f: 
    if fasta_sequence[j].id in wanted and nucleotide_list[i]=="A/C": 
     fasta_sequence[j].seq[position_list]="W\n" 
     SeqIO.write([fasta_sequence[j]], f, "fasta") 

내가 어떤 인 nucleotide_list와 j를 통과하여 fasta_sequence를 통과하는 카운터

당신은 또한 fasta_sequence을 통해 이런 식으로 반복됩니다 할 수있는 일 :

for record in SeqIO.parse(StringIO(data), "fasta"): 
    print("%s %s" % (record.id, record.seq)) 

각 요소와 서열의 순서의 ID ID되고 있습니다.

---- 업데이트 ---- 내가 당신이 ID가 일치하는지 확인, 파일의 각 레코드를 통해 이동 및 그 순서를 변경하려면 수행 할 작업을 이해 생각

위치 do :

#goes through each record in the file 
for record in SeqIO.parse(StringIO(data), "fasta"): 
    # check if id is wanted 
    if record.id in id_list: 
     # get list of every item in id_list that matches record.id 
     positions_of_id_in_id_list = [i for i, j in enumerate(id_list) if j == record.id] 
     for elem_position_lists in positions_of_id_in_id_list: 
      # I think here you want to write the new record in the correct position (substitute "W\n" with new item. Maybe nucleotide[elem_position_lists]?) 
      record.seq[position_list[elem_position_lists]] = "W\n" 
# write new file 
SeqIO.write(fasta_sequence, f, "fasta") 
+0

시도했지만 여전히 작동하지 않습니다. 라인 27에서 "="도움말을 가리키는 "구문 오류"로 vcf 파일에서 각 행을 탐색하는 방법, fasta 파일에서 일치하는 ID를 찾고 정의 된 위치에서 바꾸시겠습니까? 나는 완전히 혼란 스럽다. – user3638027

+0

if 절에는 = 대신 ==가 있어야합니다. 나는 대답을 편집 할 것이다. –

+0

이 답변으로 문제가 해결되면 다른 사람들이 무엇을 찾아야할지 알 수 있도록 올바른 것으로 표시하십시오! 감사 –

관련 문제