Wie durchsucht man NCBI in großen Mengen nach einer Liste von Zugangsnummern?

Ich habe eine große ( >100 ) Liste von Zugangsnummern, die ich nachschlagen und mit Suchen in NCBI (Nukleotid) abgleichen möchte; hauptsächlich, um einen vorläufigen Organismus zu bekommen, der mit der Zugangsnummer übereinstimmt.

ex:

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

Ich habe nach Tools gegoogelt und diese Seite gefunden . Es ist jedoch nicht das, was ich wirklich möchte, da es meine Abfragen nicht in derselben Reihenfolge wie meine Liste auflistet, was bedeutet, dass ich nicht übereinstimmen kann.

Ich habe auch versucht, ein Skript in Biopython mit Entrez E-Tools zu schreiben, war aber aufgrund mangelnder Programmierkenntnisse erfolglos.

Hat jemand eine Möglichkeit, wie ich das angehen kann?

BEARBEITEN: Über dieses Tutorial habe ich versucht, dieses Codebeispiel zu verwenden:

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()

Aber geändert, um eine beliebige Liste anstelle von zu nehmen variable id, wie unten:

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

Ausgabe ist:

1.69
673539906

283462561

Ich glaube jedoch nicht, dass ich den richtigen "rettype" -Parameter in der .efetchFunktion verwende, da ich immer wieder GI-Nummern erhalte, wo ich gehofft hatte, direkt so etwas wie einen Artnamen zu erhalten. Es sei denn, ich kann dann mit diesen GI-Nummern im Stapel mit mehr Code oder einem Tool suchen, um eine geordnete Liste zu erstellen?

Können Sie den BioPython-Code posten, den Sie ausprobiert haben und der nicht funktioniert hat? Welchen konkreten Fehler hast du bekommen? Haben Sie den Beispielcode aus dem Tutorial geändert ?
Außerdem stimmt die Zugangsnummer KJ841938.1mit überein Setoptus koraiensis, nicht mit Gaeolaelaps aculeifer. Bitte aktualisieren Sie daher Ihre Frage mit der korrekten Beispieleingabe und den erwarteten Ergebnissen.
@BioGeek Ich wusste nichts von diesem speziellen Tutorial. Ich werde das Beispiel unter "efetch" ausprobieren und sehen, ob es funktioniert. Danke.
Bei Ihrem ersten Versuch, wenn Sie verwenden handle.readline(), erhalten Sie nur die erste Zeile aus dem Datensatz im Genbank-Format. Um eine Liste aller Zeilen zu erhalten, könnten Sie verwenden handle.readlines(). Möglicherweise sind Sie mit diesem Ansatz irgendwo angekommen, aber es scheint, dass Biopython eine Möglichkeit bietet, die Ergebnisse bequemer zu analysieren (siehe meine Antwort).

Antworten (2)

Nach einigen Versuchen und Irrtümern in einer interaktiven Python-Shell und einigen Überprüfungen der Dokumentation habe ich festgestellt, dass die relevanten Informationen in der genbank-formatierten Ausgabe ( rettype="gb") vorhanden sind und diese mit geparst werden können, Entrez.readvorausgesetzt, sie werden im „xml“-Modus ( retmode="xml") zurückgegeben.

Der folgende Code scheint zu funktionieren:

#!/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))

(Sie brauchen whilehier übrigens keine Schleife: Python hat die bequemere forSyntax, um die Elemente einer Liste zu durchlaufen.)

Ausgang:

KJ841938.1  Setoptus koraiensis
FJ911852.1  Gaeolaelaps aculeifer

Wer sich nicht mit BioPython herumschlagen möchte, kann dafür Entrez Direct wie folgt verwenden:

$ 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