Heim Backend-Entwicklung Python-Tutorial Python Basic Tutorial-Projekt drei universelles XML

Python Basic Tutorial-Projekt drei universelles XML

Apr 03, 2018 am 09:21 AM
python Projekt

In diesem Artikel werden hauptsächlich die drei universellen XML-Codes des Python-Basis-Tutorialprojekts ausführlich vorgestellt, die einen gewissen Referenzwert haben.

Der Name dieses Projekts wird besser als „Universal XML“ bezeichnet Auf der Grundlage einer XML-Datei wird automatisch eine Website mit einer entsprechenden Verzeichnisstruktur generiert. Allerdings wäre es immer noch zu einfach, wenn es auch CSS generieren könnte. Dies muss in Zukunft weiterentwickelt werden. Lassen Sie uns zunächst untersuchen, wie die HTML-Website strukturiert wird. Da die Website durch eine XML-Struktur generiert wird, sollte alles aus dieser XML-Datei stammen. Schauen wir uns zunächst diese XML-Datei website.xml an:

<website>
 <page name="index" title="Home page">
 <h1>Welcome to my Home page</h1>
 <p>Hi, there. My name is Mr.gumby,and this is my home page,here are some of my int:</p>
 <ul>
  <li><a href="interests/shouting.html" rel="external nofollow" >Shouting</a></li>
  <li><a href="interests/sleeping.html" rel="external nofollow" >Sleeping</a></li>
  <li><a href="interests/eating.html" rel="external nofollow" >Eating</a></li>
 </ul>
 </page>
 <directory name="interests">
  <page name="shouting" title="Shouting">
   <h1>shouting page</h1>
   <p>....</p>
  </page>
  <page name="sleeping" title="Sleeping">
   <h1>sleeping page</h1>
   <p>...</p>
  </page>
  <page name="eating" title="Eating">
    <h1>Eating page</h1>
    <p>....</p>
  </page>
 </directory>
</website>

Mit dieser Datei wollen wir sehen, wie man sie über diese Datei-Website generiert .

Zuerst müssen wir diese XML-Datei auf die gleiche Weise analysieren wie in Java. Der Unterschied zwischen den beiden Verarbeitungsmethoden liegt in der Geschwindigkeit und im Umfang Der Schwerpunkt liegt auf Effizienz, wobei jeweils nur ein kleiner Teil des Dokuments verarbeitet und der Speicher schnell und effektiv genutzt wird. Letzteres ist die entgegengesetzte Verarbeitungsmethode, bei der zuerst alle Dokumente in den Speicher geladen und dann verarbeitet werden, was langsamer und aufwändiger ist Der einzige Vorteil des Speichers besteht darin, dass er das gesamte Dokument bearbeiten kann.

Um Sax zum Verarbeiten von XML in Python zu verwenden, müssen Sie zunächst die Parse-Funktion in xml.sax und den ContentHandler in xml.sax.handler einführen. Die letztere Klasse muss mit der Parse-Funktion zusammenarbeiten . gebraucht. Die Verwendung ist wie folgt: parse('xxx.xml',xxxHandler), der xxxHandler hier muss den oben genannten ContentHandler erben, aber er erbt ihn einfach, es ist nichts erforderlich. Wenn die Analysefunktion dann die XML-Datei verarbeitet, ruft sie die Funktion startElement und endElement in xxxHandler auf, um das Tag in XML zu starten und zu beenden. Der mittlere Prozess verwendet eine Funktion namens Zeichen, um alle Zeichenfolgen innerhalb des Tags zu verarbeiten.

Mit dem obigen Verständnis wissen wir bereits, wie man XML-Dateien verarbeitet und dann die Datei website.xml, die Quelle des Bösen, betrachtet und ihre Struktur analysiert. Es gibt nur zwei Knoten: Seite und Verzeichnis stellt offensichtlich eine Seite dar und Verzeichnis stellt ein Verzeichnis dar.

Damit wird die Idee der Verarbeitung dieser XML-Datei klar. Lesen Sie jeden Knoten der XML-Datei und bestimmen Sie dann, ob es sich um eine Seite oder ein Verzeichnis handelt. Wenn es sich um eine Seite handelt, erstellen Sie eine HTML-Seite und schreiben Sie dann den Inhalt des Knotens in die Datei. Wenn ein Verzeichnis gefunden wird, erstellen Sie einen Ordner und verarbeiten Sie dann den darin enthaltenen Seitenknoten (falls vorhanden).
Schauen wir uns diesen Teil des Codes an. Die Implementierung im Buch ist komplexer und flexibler. Schauen wir es uns zuerst an und analysieren wir es dann.

from xml.sax.handler import ContentHandler
from xml.sax import parse
import os
class Dispatcher:
    def dispatch(self, prefix, name, attrs=None):
        mname = prefix + name.capitalize()
        dname = &#39;default&#39; + prefix.capitalize()
        method = getattr(self, mname, None)
        if callable(method): args = ()
        else:
            method = getattr(self, dname, None)
            args = name,
        if prefix == &#39;start&#39;: args += attrs,
        if callable(method): method(*args)
    def startElement(self, name, attrs):
        self.dispatch(&#39;start&#39;, name, attrs)
    def endElement(self, name):
        self.dispatch(&#39;end&#39;, name)
class WebsiteConstructor(Dispatcher, ContentHandler):
    passthrough = False
    def __init__(self, directory):
        self.directory = [directory]
        self.ensureDirectory()
    def ensureDirectory(self):
        path = os.path.join(*self.directory)
        print path
        print &#39;----&#39;
        if not os.path.isdir(path): os.makedirs(path)
    def characters(self, chars):
        if self.passthrough: self.out.write(chars)
    def defaultStart(self, name, attrs):
        if self.passthrough:
            self.out.write(&#39;<&#39; + name)
            for key, val in attrs.items():
                self.out.write(&#39; %s="%s"&#39; %(key, val))
            self.out.write(&#39;>&#39;)
    def defaultEnd(self, name):
        if self.passthrough:
            self.out.write(&#39;</%s>&#39; % name)
    def startDirectory(self, attrs):
        self.directory.append(attrs[&#39;name&#39;])
        self.ensureDirectory()
    def endDirectory(self):
        print &#39;endDirectory&#39;
        self.directory.pop()
    def startPage(self, attrs):
        print &#39;startPage&#39;
        filename = os.path.join(*self.directory + [attrs[&#39;name&#39;]+&#39;.html&#39;])
        self.out = open(filename, &#39;w&#39;)
        self.writeHeader(attrs[&#39;title&#39;])
        self.passthrough = True
    def endPage(self):
        print &#39;endPage&#39;
        self.passthrough = False
        self.writeFooter()
        self.out.close()
    def writeHeader(self, title):
        self.out.write(&#39;<html>\n <head>\n  <title>&#39;)
        self.out.write(title)
        self.out.write(&#39;</title>\n </head>\n <body>\n&#39;)
    def writeFooter(self):
        self.out.write(&#39;\n </body>\n</html>\n&#39;)
parse(&#39;website.xml&#39;,WebsiteConstructor(&#39;public_html&#39;))

Es scheint, dass die obige Analyse dieses Programms etwas komplizierter ist, aber der große Mann Maomao sagte, dass jedes komplexe Programm so sei ein Papiertiger. Dann analysieren wir dieses Programm noch einmal.

Zuerst habe ich gesehen, dass dieses Programm zwei Klassen hat. Aufgrund der Vererbung kann es tatsächlich als eine Klasse betrachtet werden.

Dann schauen wir uns an, was es sonst noch hat: startElement, endElement und Zeichen, die wir analysiert haben: startPage, endDirectory; writeHeader, writeFooter; ; und Versand, diese Funktionen. Mit Ausnahme des Versands sind die vorherigen Funktionen leicht zu verstehen. Jedes Funktionspaar verarbeitet einfach die entsprechenden HTML-Tags und XML-Knoten. Der Versand ist komplizierter, da er zum dynamischen Kombinieren und Ausführen von Funktionen verwendet wird.

Die Verarbeitungsidee des Versands besteht darin, anhand der übergebenen Parameter (dh des Operationsnamens und des Knotennamens) zunächst zu bestimmen, ob eine entsprechende Funktion wie startPage vorhanden ist Existieren Sie, führen Sie den Standard- und Operationsnamen aus: z. B. defaultStart.

Nachdem Sie jede Funktion einzeln herausgefunden haben, wissen Sie, wie der gesamte Verarbeitungsablauf aussieht. Erstellen Sie zunächst eine public_html-Datei, um die gesamte Website zu speichern, lesen Sie dann die XML-Knoten und rufen Sie den Dispatch über startElement und endElement zur Verarbeitung auf. Dann gibt es noch die Art und Weise, wie der Versand die spezifische Verarbeitungsfunktion aufruft. Zu diesem Zeitpunkt ist die Analyse dieses Projekts abgeschlossen.

Der Hauptinhalt, den es zu beherrschen gilt, ist die Verwendung von SAX zur Verarbeitung von XML in Python, und der andere ist die Verwendung von Funktionen in Python, wie z. B. getattr, Sternchen beim Übergeben von Parametern ...

Verwandt empfohlen:

Python Basic Tutorial Project 2: Gute Bilder

Python Basic Tutorial Project 4: News Aggregation

Das obige ist der detaillierte Inhalt vonPython Basic Tutorial-Projekt drei universelles XML. 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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

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)

Heiße Themen

PHP-Tutorial
1511
276
Was sind gemeinsame Strategien zum Debuggen eines Speicherlecks in Python? Was sind gemeinsame Strategien zum Debuggen eines Speicherlecks in Python? Aug 06, 2025 pm 01:43 PM

UsetracemalloctoTrackMemoryAllocations undidentififyHigh-Memorindininen; 2.MonitorObjectCountswithgcandobjgraphoToDeCtGrowingObjecttypes;

Was ist die Stimmungsanalyse im Kryptowährungshandel? Was ist die Stimmungsanalyse im Kryptowährungshandel? Aug 14, 2025 am 11:15 AM

Inhaltsverzeichnis Was ist die Stimmungsanalyse im Kryptowährungshandel? Warum die Stimmungsanalyse für Kryptowährungsinvestitionen wichtig ist, wobei wichtige Quellen von Emotionsdaten a. Social -Media -Plattform b. Nachrichtenmedien c. Instrumente für die Stimmungsanalyse und Technologie häufig verwendete Tools in der Stimmungsanalyse: Angenommene Techniken: Integrieren Sie die Stimmungsanalyse in Handelsstrategien, wie Händler es verwenden: Strategie Beispiel: Annahme von BTC -Handelsszenario -Szenario -Szenario -Szenario -Szenario -Szenario -Szenario -Einstellung: Emotionales Signal: Händlern Interpretation: Entscheidung: Ergebnisse und Einschränkungen und Rissen der Stimmungsanalyse, die Emotionen für die Kryption des Trading -Verständnisses im Verknüpfung des Kryptionsverbots. Eine kürzlich von Hamid 2025 Studie 2025

Wie automatisieren Sie die Dateneingabe von Excel zu einem Webformular mit Python? Wie automatisieren Sie die Dateneingabe von Excel zu einem Webformular mit Python? Aug 12, 2025 am 02:39 AM

Die Methode zum Ausfüllen von Excel -Daten in Webformulare mithilfe von Python lautet: Verwenden Sie zunächst Pandas, um Excel -Daten zu lesen und dann mit Selen das Browser zu steuern, um das Formular automatisch zu füllen und zu übermitteln. Zu den spezifischen Schritten gehören die Installation von Pandas, OpenPyxl- und Selenium -Bibliotheken, das Herunterladen des entsprechenden Browsertreibers, die Verwendung von Pandas zum Lesen von Namen, E -Mails, Telefon und anderen Feldern in der Datei data.xlsx, starten Sie den Browser über Selen, um das Ziel -Last zu erstellen. Wenn Sie die Ausnahme des Stellverfahrens verarbeiten, können Sie die Ausnahme des Stellverfahrens verarbeiten. Formieren und verarbeiten Sie alle Datenlinien in einer Schleife.

So verwenden Sie die Aufzählung zur Schleife mit einem Index in Python So verwenden Sie die Aufzählung zur Schleife mit einem Index in Python Aug 11, 2025 pm 01:14 PM

Wenn Sie die Sequenz durchqueren und auf den Index zugreifen müssen, sollten Sie die Funktion "Enumerate () verwenden. 1.. Enumerate () liefert automatisch den Index und den Wert, der prägnanter ist als Bereich (Len (Sequenz)); 2. Sie können den Startindex über den Startparameter angeben, z. B. Start = 1, um 1 basierte Zählung zu erreichen. 3.. Sie können es in Kombination mit bedingter Logik verwenden, z. B. das Überspringen des ersten Elements, die Anzahl der Schleifen oder die Formatierung der Ausgabe. 4. Für iterable Objekte wie Listen, Zeichenfolgen und Tupel sowie für das Auspacken von Elementen anwendbar; 5. Verbesserung der Code -Lesbarkeit, vermeiden Sie manuell verwaltet und reduzieren Sie Fehler.

Wie implementieren Sie einen benutzerdefinierten Iterator in einer Python -Klasse? Wie implementieren Sie einen benutzerdefinierten Iterator in einer Python -Klasse? Aug 06, 2025 pm 01:17 PM

Define__iter __ () toreturn theiteratorObject, typisch SelfoRaseParateiterinInstance

Wie gehe ich in Python mit großen Datensätzen um, die nicht in den Speicher passen? Wie gehe ich in Python mit großen Datensätzen um, die nicht in den Speicher passen? Aug 14, 2025 pm 01:00 PM

Bei der Verarbeitung großer Datensätze, die den Speicher in Python überschreiten, können sie nicht gleichzeitig in RAM geladen werden. Stattdessen sollten Strategien wie Chunking -Verarbeitung, Festplattenspeicher oder Streaming eingesetzt werden. CSV -Dateien können in Stücken über Pandas 'Chunkize -Parameter und den verarbeiteten Block nach Block gelesen werden. Dask kann verwendet werden, um die Parallelisierungs- und Aufgabenplanung ähnlich wie die PANDAS -Syntax zur Unterstützung großer Speicherdatenoperationen. Schreiben Sie Generatorfunktionen, um die Zeile der Textdateien für Zeile zu lesen, um die Speicherverwendung zu reduzieren. Verwenden Sie das Parquet -Säulen -Speicherformat in Kombination mit Pyarrow, um bestimmte Spalten oder Zeilengruppen effizient zu lesen. Verwenden Sie das Memmap von Numpy zur Speicherkarte große numerische Arrays, um auf Datenfragmente bei Bedarf zuzugreifen, oder speichern Sie Daten in leichten Daten wie SQLite oder Duckdb.

So kopieren Sie Dateien und Verzeichnisse von einem Ort zum anderen in Python So kopieren Sie Dateien und Verzeichnisse von einem Ort zum anderen in Python Aug 11, 2025 pm 06:11 PM

Um Dateien und Verzeichnisse zu kopieren, bietet das Shutil -Modul von Python einen effizienten und sicheren Ansatz. 1. verwenden Sie Shutil.copy () oder Shutil.copy2 (), um eine einzelne Datei zu kopieren, die Metadaten behält; 2. Verwenden Sie Shutil.copyTree (), um das gesamte Verzeichnis rekursiv zu kopieren. Das Zielverzeichnis kann nicht im Voraus existieren, aber das Ziel kann durch DIRS_EXIST_OK = TRUE (Python3.8) existieren. 3.. Sie können bestimmte Dateien in Kombination mit Ignorierparametern und Shutil.ignore_Patterns () oder benutzerdefinierten Funktionen filtern. 4. Das Kopieren von Verzeichnissen erfordert nur OS.Walk () und OS.Makedirs ()

Wie benutze ich Python für die Aktienmarktanalyse und -vorhersage? Wie benutze ich Python für die Aktienmarktanalyse und -vorhersage? Aug 11, 2025 pm 06:56 PM

Python kann für die Börsenmarktanalyse und -vorhersage verwendet werden. Die Antwort lautet ja. Durch die Verwendung von Bibliotheken wie YFInance, Pandas zur Datenreinigung und Feature -Engineering, die Kombination von Matplotlib oder Seeborn zur visuellen Analyse und Verwendung von Modellen wie ARIMA, Zufallswald, Xgboost oder LSTM, um ein Vorhersagesystem aufzubauen, und die Bewertung der Leistung durch Backtesting zu bewerten. Schließlich kann die Anwendung mit Kolben oder Fastapi eingesetzt werden, aber der Unsicherheit der Marktprognosen, der Überanpassungsrisiken und der Transaktionskosten und dem Erfolg hängt von der Datenqualität, dem Modelldesign und den angemessenen Erwartungen ab.

See all articles