UniProt-Textformat in Python lesen
English
Deutsch
Wie bei vielen anderen Datenbanken in der rechnergestützten Biologie sind die Downloads für die beliebte UniProt-Datenbank in einem eigenen Textformat verfügbar, das auf ExPASy dokumentiert ist.
Es ist sicherlich nicht schwierig, einen generischen Parser zu schreiben, und man kann BioPython verwenden, aber ich glaube, dass es oft einfacher ist, einen getesteten Parser zu verwenden, der nur Standardbibliotheken nutzt.
Dieser Code bietet einen einfach zu verwendenden, generatorbasierten Streaming-Parser, der die Datensätze in dictionary-ähnliche Objekte parst. Zeilenumbrüche innerhalb von Feldern werden immer beibehalten. Der Parser geht davon aus, dass die Datei UTF-8-kodiert ist.
read_uniprot.py
#!/usr/bin/env python3
"""
Ein einfacher Reader für das UniProt-Textformat, wie es auf
http://www.uniprot.org/downloads heruntergeladen werden kann
"""
import gzip
from collections import defaultdict
__author__ = "Uli Köhler"
__copyright__ = "Copyright 2014, Uli Koehler"
__license__ = "Apache License v2.0"
__version__ = "1.0"
def readUniprot(fin):
"""Parst ein file-ähnliches Objekt und generiert UniProt-Objekte"""
lastKey = None # Der zuletzt gefundene Key
currentEntry = defaultdict(str)
for line in fin:
key = line[:2].decode("ascii")
#Neuen Eintrag verarbeiten
if key == "//":
yield currentEntry
currentEntry = defaultdict(str)
#SQ-Feld hat keinen Zeilen-Header außer in der ersten Zeile
if key == " ":
key = lastKey
lastKey = key
#Value SOLLTE ASCII sein, sonst nehmen wir UTF8 an
value = line[5:].decode("utf-8")
currentEntry[key] += value
#Wenn ein nicht-leerer Eintrag übrig ist, diesen ausgeben
if currentEntry:
yield currentEntry
if __name__ == "__main__":
#Beispiel für die Verwendung von readUniprot()
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("file")
args = parser.parse_args()
with gzip.open(args.file, "rb") as infile:
#readUniprot() yielded alle Dokumente
for uniprot in readUniprot(infile):
print(uniprot)Check out similar posts by category:
Bioinformatics, Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow