Heim Backend-Entwicklung Python-Tutorial Tipps zum Parsen umfangreicher XML-Daten mit Python

Tipps zum Parsen umfangreicher XML-Daten mit Python

Aug 07, 2023 pm 03:55 PM
xml解析器 (xml parser) 数据解析 (data parsing) 大规模数据处理 (big data processing)

Tipps zum Parsen umfangreicher XML-Daten mit Python

Tipps und Codebeispiele für die Verwendung von Python zum Parsen großer XML-Daten

1. Einführung
XML (Extensible Markup Language) ist eine Auszeichnungssprache, die zum Speichern und Übertragen von Daten verwendet wird. Sie ist selbstbeschreibend und erweiterbar. Bei der Verarbeitung großer XML-Dateien sind häufig spezielle Techniken und Tools erforderlich, um die Effizienz zu verbessern und den Speicherverbrauch zu reduzieren. In diesem Artikel werden einige gängige Techniken zum Parsen umfangreicher XML-Daten in Python vorgestellt und entsprechende Codebeispiele bereitgestellt.

2. Verwenden Sie den SAX-Parser.
Verwenden Sie das in Python integrierte Modul xml.sax, um XML-Daten ereignisgesteuert zu analysieren. Im Vergleich zum DOM-Parser (Document Object Model) bietet der SAX-Parser (Simple API for XML) offensichtliche Vorteile bei der Verarbeitung großer XML-Dateien. Es muss nicht die gesamte Datei in den Speicher geladen werden, sondern liest die Daten Zeile für Zeile gemäß der XML-Dateistruktur und löst die entsprechende Rückruffunktion zur Verarbeitung aus, wenn bestimmte Ereignisse (z. B. Start-Tags, End-Tags, Zeichendaten) auftreten , usw.).

Das Folgende ist ein Beispielcode, der einen SAX-Parser zum Parsen umfangreicher XML-Daten verwendet:

import xml.sax

class MyContentHandler(xml.sax.ContentHandler):
    def __init__(self):
        self.current_element = ""
        self.current_data = ""
    
    def startElement(self, name, attrs):
        self.current_element = name
    
    def characters(self, content):
        if self.current_element == "name":
            self.current_data = content
    
    def endElement(self, name):
        if name == "name":
            print(self.current_data)
            self.current_data = ""

parser = xml.sax.make_parser()
handler = MyContentHandler()
parser.setContentHandler(handler)
parser.parse("large.xml")
Nach dem Login kopieren

Im obigen Code haben wir eine Prozessorklasse MyContentHandler angepasst, die von xml.sax.ContentHandler erbt. In Rückruffunktionen wie startElement, Zeichen und endElement verarbeiten wir XML-Daten entsprechend dem tatsächlichen Bedarf. In diesem Beispiel kümmern wir uns nur um die Daten des Namenselements und geben diese aus.

3. Verwenden Sie die lxml-Bibliothek zum Parsen von XML-Daten.
lxml ist eine leistungsstarke Python-Bibliothek, die eine effiziente API zur Verarbeitung von XML- und HTML-Daten bereitstellt. Es kann mit XPath (einer Sprache zur Auswahl von XML-Knoten) kombiniert werden, um XML-Daten einfach zu extrahieren und zu bearbeiten. Für die Verarbeitung umfangreicher XML-Daten ist lxml häufig effizienter als das integrierte XML-Modul.

Das Folgende ist ein Beispielcode zum Parsen umfangreicher XML-Daten mithilfe der lxml-Bibliothek:

import lxml.etree as et

def process_xml_element(element):
    name = element.find("name").text
    print(name)

context = et.iterparse("large.xml", events=("end", "start"))
_, root = next(context)
for event, element in context:
    if event == "end" and element.tag == "entry":
        process_xml_element(element)
        root.clear()
Nach dem Login kopieren

Im obigen Code verwenden wir die Iterparse-Funktion des lxml.etree-Moduls, um die XML-Daten Zeile für Zeile zu analysieren. Indem wir den Ereignisparameter als („Ende“, „Start“) angeben, können wir die entsprechende Verarbeitungslogik am Anfang und Ende jedes XML-Elements ausführen. Im Beispielcode rufen wir die Funktion „process_xml_element“ auf, um die Daten des Namenselements zu verarbeiten, wenn das Eintragselement analysiert wird.

4. Große XML-Daten in Blöcken analysieren
Wenn bei der Verarbeitung großer XML-Daten die gesamte Datei zum Parsen auf einmal geladen wird, kann dies zu einer übermäßigen Speichernutzung und sogar zum Absturz des Programms führen. Eine gängige Lösung besteht darin, die XML-Datei zum Parsen in kleine Teile aufzuteilen.

Hier ist ein Beispielcode zum Parsen umfangreicher XML-Daten in Blöcken:

import xml.etree.ElementTree as et

def process_xml_chunk(chunk):
    root = et.fromstringlist(chunk)
    for element in root.iter("entry"):
        name = element.find("name").text
        print(name)

chunk_size = 100000
with open("large.xml", "r") as f:
    while True:
        chunk = "".join(next(f) for _ in range(chunk_size))
        if chunk:
            process_xml_chunk(chunk)
        else:
            break
Nach dem Login kopieren

Im obigen Code analysieren wir die XML-Daten Block für Block, indem wir die XML-Datei in kleine Blöcke mit jeweils 100.000 Zeilen aufteilen. In der Funktion „process_xml_chunk“ verwenden wir die Funktion „fromstringlist“ des Moduls „xml.etree.ElementTree“, um den Zeichenfolgenblock in ein Elementobjekt zu konvertieren und dann die Datenverarbeitung nach Bedarf durchzuführen.

5. Verwenden Sie den Prozesspool, um XML-Daten parallel zu analysieren. Wenn Sie die Effizienz beim Parsen großer XML-Daten weiter verbessern möchten, können Sie das Multiprocessing-Modul von Python verwenden, um mehrere Prozesse zum parallelen Parsen von XML-Dateien zu verwenden.

Das Folgende ist ein Beispielcode, der einen Prozesspool verwendet, um große XML-Daten parallel zu analysieren:

import xml.etree.ElementTree as et
from multiprocessing import Pool

def parse_xml_chunk(chunk):
    root = et.fromstringlist(chunk)
    entries = root.findall("entry")
    return [entry.find("name").text for entry in entries]

def process_xml_data(data):
    with Pool() as pool:
        results = pool.map(parse_xml_chunk, data)
    for result in results:
        for name in result:
            print(name)

chunk_size = 100000
data = []
with open("large.xml", "r") as f:
    while True:
        chunk = [next(f) for _ in range(chunk_size)]
        if chunk:
            data.append(chunk)
        else:
            break

process_xml_data(data)
Nach dem Login kopieren
Im obigen Code wird die Funktion „parse_xml_chunk“ zur parallelen Ausführung an mehrere Prozesse übergeben, und jeder Prozess ist dafür verantwortlich zum Parsen eines kleinen Teils von XML-Daten. Nachdem die Analyse abgeschlossen ist, führt der Hauptprozess die Ergebnisse zusammen und gibt sie aus.

6. Zusammenfassung

In diesem Artikel werden einige gängige Techniken für die Verwendung von Python zum Parsen großer XML-Daten vorgestellt und entsprechende Codebeispiele bereitgestellt. Durch den Einsatz von Methoden wie SAX-Parser, lxml-Bibliothek, Chunked Parsing und Prozesspool-Parallelität können die Effizienz und Leistung beim Parsen großer XML-Daten verbessert werden. In praktischen Anwendungen kann die Auswahl der geeigneten Methode entsprechend den tatsächlichen Anforderungen die Herausforderungen der XML-Datenverarbeitung besser bewältigen.

Das obige ist der detaillierte Inhalt vonTipps zum Parsen umfangreicher XML-Daten mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Apr 01, 2025 pm 11:18 PM

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

See all articles