¿Cómo buscar en NCBI a granel una lista de números de acceso?

Tengo una lista grande ( >100 ) de números de acceso que quiero buscar y hacer coincidir con las búsquedas en NCBI (nucleótido); principalmente para obtener un organismo tentativo que coincida con el número de accesión.

ex:

KJ841938.1 would match to  Setoptus koraiensis
...
FJ911852.1 would match to  Uncultured eukaryote
...

Busqué herramientas en Google y encontré este sitio . Sin embargo, no es lo que realmente quiero ya que no enumera mis consultas en el mismo orden que mi lista, lo que significa que no puedo coincidir.

También intenté escribir un script en biopython usando las herramientas electrónicas de Entrez, pero no tuve éxito debido a la falta de habilidades de codificación.

¿Alguien tiene alguna manera de que pueda hacer esto?

EDITAR: a través de este tutorial , intenté usar este ejemplo de código:

from Bio import Entrez
Entrez.email = "Your.Name.Here@example.org"
handle = Entrez.efetch(db="nucleotide", id="AY851612", rettype="gb", retmode="text")
print(handle.readline().strip())
# expected output : LOCUS       AY851612                 892 bp    DNA     linear   PLN 10-APR-2007
handle.close()

Pero modificado para tomar cualquier lista en lugar de variable id, como se muestra a continuación:

import Bio
print (Bio.__version__)
from Bio import Entrez
import time


Entrez.email = "Your.Name.Here@example.org"
id_list = ["KJ841938.1", "FJ911852.1"] # real list is about 500 elements

x = 0
while  x < len(id_list):
    handle = Entrez.efetch(db="nucleotide", id=id_list[x], rettype= "uilist", retmode="text")
    #print(handle.readline().strip())
    print(handle.readline())
    handle.close()
    x = x + 1

La salida es:

1.69
673539906

283462561

Sin embargo, no creo que esté usando el parámetro "rettype" correcto en la .efetchfunción, ya que sigo obteniendo números de GI, donde esperaba obtener algo como el nombre de una especie directamente. A menos que pueda buscar con estos números GI en lote con más código o una herramienta para producir una lista ordenada.

¿Puedes publicar el código de BioPython que has probado y que no funcionó? ¿Qué error específico tienes? ¿Has modificado el código de ejemplo del tutorial ?
Además, el número de acceso KJ841938.1coincide con Setoptus koraiensis, no con Gaeolaelaps aculeifer. Por lo tanto, actualice su pregunta con la entrada de muestra correcta y los resultados esperados.
@BioGeek No sabía sobre ese tutorial específico. Probaré el ejemplo bajo "efetch" y veré si funciona. Gracias.
En su primer intento, cuando usa handle.readline(), obtiene solo la primera línea del registro con formato genbank. Para obtener una lista de todas las líneas, puede usar handle.readlines(). Es posible que haya llegado a alguna parte con este enfoque, pero parece que Biopython proporciona una forma de analizar los resultados de manera más conveniente (vea mi respuesta).

Respuestas (2)

Después de algunas pruebas y errores en un shell de python interactivo y algunas comprobaciones de la documentación, descubrí que la información relevante está presente en la salida con formato genbank ( rettype="gb"), y esto se puede analizar Entrez.readsiempre que se devuelva en modo "xml" ( retmode="xml").

El siguiente código que parece funcionar:

#!/usr/bin/env python3

from Bio import Entrez


Entrez.email = "Your.Name.Here@example.org"
id_list = ["KJ841938.1", "FJ911852.1"] # real list is about 500 elements

for accession in id_list:
    handle = Entrez.efetch(
        db="nucleotide", id=accession, rettype="gb", retmode="xml")
    gb_record = Entrez.read(handle)
    handle.close()
    organism = gb_record[0]['GBSeq_organism']
    print("{}\t{}".format(accession, organism))

(Por cierto, no necesita un whileciclo aquí: python tiene la forsintaxis más conveniente para recorrer los elementos de una lista).

Producción:

KJ841938.1  Setoptus koraiensis
FJ911852.1  Gaeolaelaps aculeifer

Si no quiere molestarse con BioPython, puede usar Entrez Direct para esto de la siguiente manera:

$ cat temp.txt
KJ841938.1
FJ911852.1
$ epost -db nuccore -input temp.txt \
    | esummary \
    | xtract -pattern DocumentSummary -element AccessionVersion,Organism
KJ841938.1  Setoptus koraiensis
FJ911852.1  Gaeolaelaps aculeifer