2012-06-02 3 views
2

저는 python을 사용하여 매우 새롭습니다. 그러나 나는이 문제에 붙어있어 당신이 내가 빠진 것에 대해 뒷모습을 줄 수 있기를 바랍니다.excel에서 ID 목록을 사용하여 fasta 형식으로 NCBI의 시퀀스를 저장합니다.

excel 파일에 유전자 ID 목록이 있는데 xrld 및 biopython을 사용하여 시퀀스를 검색하고 내 결과를 텍스트 문서로 저장하려고합니다 (fasta 형식). 지금까지, 내 ​​코드를 사용하면 쉘에서 결과를 볼 수 있지만 문서의 마지막 시퀀스 만 저장합니다.

import xlrd 
import re 
book = xlrd.open_workbook('ids.xls') 
sh = book.sheet_by_index(0) 
for rx in range(sh.nrows): 
    if sh.row(rx)[0].value: 
     from Bio import Entrez 
     from Bio import SeqIO 
     Entrez.email = "[email protected]" 
     in_handle = Entrez.efetch(db="nucleotide", rettype="fasta", id=sh.row(rx)[0].value) 
     record = SeqIO.parse(in_handle, "fasta") 
     for record in SeqIO.parse(in_handle, "fasta"): 
      print record.format("fasta") 
     out_handle = open("example.txt", "w") 
     SeqIO.write(record, out_handle, "fasta") 
     in_handle.close() 
     out_handle.close() 

내가 언급 한 바와 같이, 파일 "example.txt은"만 (FASTA 형식)의 마지막 순서가 쉘을 보여줍니다

이 내 코드입니다.

다른 사람이 동일한 문서에서 NCBI에서 검색하는 시퀀스를 가져 오는 방법을 알려 줄 수 있습니까?

당신에게 대단히 감사합니다

안토니오

답변

1

나는 또한 파이썬 상당히 새로운 오전과 또한 그것을 사랑 해요! 이 질문에 대한 답변은 처음 시도한 것이지만 루프 구조와 'w'모드 때문일 수 있습니다. 아마도 다음과 같이 모드 ("example.txt", "a")를 추가하려면 "example.txt", "w"를 변경해보십시오.

import xlrd 
import re 
book = xlrd.open_workbook('ids.xls') 
sh = book.sheet_by_index(0) 
for rx in range(sh.nrows): 
    if sh.row(rx)[0].value: 
     from Bio import Entrez 
     from Bio import SeqIO 
     Entrez.email = "[email protected]" 
     in_handle = Entrez.efetch(db="nucleotide", rettype="fasta", id=sh.row(rx)[0].value) 
     record = SeqIO.parse(in_handle, "fasta") 
     for record in SeqIO.parse(in_handle, "fasta"): 
      print record.format("fasta") 
     out_handle = open("example.txt", "a") 
     SeqIO.write(record, out_handle, "fasta") 
     in_handle.close() 
     out_handle.close() 
1

거의 내 친구들!

문제는 For 루프가 각 루프를 계속 닫는 것입니다. 또한 코드 속도를 높이는 몇 가지 사소한 문제를 수정했습니다 (예 : Bio를 각 루프로 가져옴).

사용이 새로운 코드 :

out_handle = open("example.txt", "w") 
import xlrd 
import re 
from Bio import Entrez 
from Bio import SeqIO 
book = xlrd.open_workbook('ids.xls') 
sh = book.sheet_by_index(0) 
for rx in range(sh.nrows): 
    if sh.row(rx)[0].value: 
     Entrez.email = "[email protected]" 
     in_handle = Entrez.efetch(db="nucleotide", rettype="fasta", id=rx) 
     record = SeqIO.parse(in_handle, "fasta") 
     SeqIO.write(record, out_handle, "fasta") 
     in_handle.close() 
out_handle.close() 

는 여전히 오류, 그것은 당신의 엑셀 파일에 문제가 될해야합니다. 오류가 계속 지속되면 내가 도와 줄 것입니다.