Das Buch "Python. Express Kurs. 3. Ausgabe. "

    BildHi, Habrozhiteli! Dieses Buch richtet sich an Personen, die bereits Erfahrung in einer oder mehreren Programmiersprachen haben und die Grundlagen von Python 3 so schnell und einfach wie möglich erlernen möchten, wobei davon ausgegangen wird, dass der Leser mit Kontrollstrukturen, OOP, Dateiverwaltung, Ausnahmebehandlung usw. bereits vertraut ist. Das Buch ist auch für Benutzer früherer Python-Versionen hilfreich, die einen kompakten Leitfaden zu Python 3.1 benötigen.

    Wir bieten Ihnen an, die Passage "Verarbeiten von Dateien" zu lesen.

    Wie benutzt man das Buch?


    Teil 1 enthält allgemeine Informationen zu Python. Sie erfahren, wie Sie Python auf Ihr System herunterladen und installieren. Es bietet auch einen allgemeinen Überblick über die Sprache, der vor allem für erfahrene Programmierer nützlich sein wird, die einen Überblick über Python erhalten möchten.

    Teil 2 enthält das Hauptmaterial des Buches. Es werden die Zutaten besprochen, die erforderlich sind, um praktische Kenntnisse im Umgang mit Python als universelle Programmiersprache zu erlangen. Das Material der Kapitel wurde so gestaltet, dass Leser, die gerade erst mit Python beginnen, konsequent vorgehen können und die wichtigsten Punkte der Sprache lernen können. In diesem Teil gibt es auch komplexere Abschnitte, sodass Sie zurückgehen und alle notwendigen Informationen zu einer bestimmten Struktur oder einem bestimmten Thema an einem Ort finden können.

    In Teil 3 werden die erweiterten Funktionen von Python vorgestellt - Elemente der Sprache, die nicht unbedingt erforderlich sind, aber sicherlich für jeden ernsthaften Python-Programmierer von Nutzen sind.

    Teil 4 konzentriert sich auf spezialisierte Themen, die über die einfache Sprachsyntax hinausgehen. Sie können diese Kapitel lesen oder je nach Bedarf überspringen.

    Für Anfänger sollten Python-Programmierer mit Kapitel 3 beginnen, um einen allgemeinen Eindruck zu erzeugen, und dann mit den interessanten Kapiteln in Teil 2 fortfahren. Geben Sie interaktive Beispiele ein, um die Konzepte sofort zu konsolidieren. Sie können auch über die Beispiele im Text hinausgehen und nach Antworten auf noch unklare Fragen suchen. Ein solcher Ansatz erhöht die Lerngeschwindigkeit und vertieft das Verständnis. Wenn Sie mit OOP nicht vertraut sind oder für Ihre Anwendung nicht erforderlich sind, können Sie die meisten Kapitel 15 überspringen.

    Leser, die bereits mit Python vertraut sind, sollten auch mit Kapitel 3 beginnen. Es enthält eine gute Einführungsübersicht und eine Beschreibung der Unterschiede zwischen Python 3 und mehr. bekannte Versionen. Es kann auch verwendet werden, um zu beurteilen, ob Sie bereit sind, mit den komplexeren Kapiteln in Teil 3 und 4 dieses Handbuchs fortzufahren.

    Möglicherweise können einige Leser, die keine Erfahrung mit Python haben, aber ausreichend Erfahrung mit anderen Programmiersprachen haben, die meisten Informationen erhalten, indem Sie Kapitel 3 lesen und die Module der Standard-Python-Bibliothek (Kapitel 19) und des Python-Bibliotheks-Referenzhandbuchs in der Python-Dokumentation lesen .

    Auszug Verarbeiten von Dateien


    Die meisten Daten werden in Textdateien verteilt. Dies kann entweder unstrukturierter Text sein (z. B. eine Auswahl von Nachrichten oder eine Sammlung literarischer Texte) oder mehr strukturierte Daten, in denen jede Zeile ein Datensatz ist und die Felder durch ein spezielles Trennzeichen getrennt werden - ein Komma, ein Tabulator oder eine vertikale Leiste (|). Textdateien können sehr groß sein. Ein Datensatz kann Dutzende oder sogar Hunderte von Dateien enthalten, und die darin enthaltenen Daten können unvollständig oder verzerrt sein. Bei einer solchen Vielfalt stoßen Sie fast zwangsläufig auf das Lesen und Verwenden von Daten aus Textdateien. In diesem Kapitel werden die grundlegenden Strategien zum Lösen dieses Problems in Python beschrieben.

    21.1. Einführung in ETL


    Die Notwendigkeit, Daten aus Dateien zu extrahieren, zu analysieren, in ein geeignetes Format zu konvertieren und dann etwas zu tun, erschien fast gleichzeitig mit Datendateien. Darüber hinaus gibt es für diesen Prozess sogar einen Standardbegriff: ETL (Extract-Transform-Load, d. H. "Extrakt-Transform-Load"). Unter Extraktion wird der Vorgang verstanden, eine Datenquelle zu lesen und gegebenenfalls zu analysieren. Die Konvertierung kann das Bereinigen und Normalisieren von Daten sowie das Zusammenführen, Aufteilen und Reorganisieren der darin enthaltenen Datensätze umfassen. Laden bedeutet schließlich das Speichern der konvertierten Daten an einem neuen Ort (in einer anderen Datei oder Datenbank). In diesem Kapitel werden die Grundlagen für die Implementierung von ETL in Python beschrieben, angefangen mit Textdatendateien bis zum Speichern der konvertierten Daten in anderen Dateien.

    21.2. Lesen von Textdateien


    Der erste Teil von ETL, die Extraktion, beinhaltet das Öffnen einer Datei und das Lesen des Inhalts. Auf den ersten Blick klingt es einfach, aber auch hier können Probleme auftreten - zum Beispiel die Dateigröße. Wenn die Datei zu groß ist, um in den Speicher zu passen, muss der Code so strukturiert sein, dass er mit kleineren Segmenten der Datei (möglicherweise jeweils einer Zeile) funktioniert.

    21.2.1. Textkodierung: ASCII, Unicode und andere


    Ein weiteres mögliches Problem liegt in der Kodierung. In diesem Kapitel wird die Arbeit mit Textdateien beschrieben. Tatsächlich wird ein großer Teil der in der realen Welt übertragenen Daten in Textdateien gespeichert. Die genaue Art des Textes kann jedoch je nach Anwendung, Benutzer und natürlich Land unterschiedlich sein.

    Manchmal enthält der Text Informationen in ASCII-Kodierung, die 128 Zeichen umfassen, von denen nur 95 zur Kategorie der gedruckten Zeichen gehören. Glücklicherweise ist ASCII das „kleinste gemeinsame Vielfache“ der meisten Datenübertragungssituationen. Auf der anderen Seite kann es nicht mit den Schwierigkeiten zahlreicher weltweit existierender Alphabete und Schreibsysteme umgehen. Das Lesen von ASCII-Dateien wird fast sicher dazu führen, dass beim Lesen nicht unterstützter Zeichen, sei es Deutsch ü, Portugiesisch ç, oder fast jedes Zeichen aus einer anderen Sprache als Englisch, Probleme auftreten und Fehler auftreten.

    Diese Fehler treten auf, weil ASCII 7-Bit-Werte verwendet, während Bytes in einer typischen Datei aus 8 Bit bestehen. Dadurch können 256 mögliche Werte anstelle von 128 für 7-Bit-Werte dargestellt werden. Diese zusätzlichen Codes werden normalerweise verwendet, um zusätzliche Werte zu speichern - von erweiterten Satzzeichen (wie mittlere und kurze Bindestriche) bis hin zu verschiedenen Marken (Markenzeichen, Copyright-Zeichen und Gradzeichen) und Versionen von Buchstaben mit Akzenten. Es gab immer ein Problem: Beim Lesen einer Textdatei konnten Sie auf ein Zeichen stoßen, das über den ASCII-Bereich von 128 Zeichen hinausging und nicht sicher war, welches Zeichen codiert war. Angenommen, Sie sehen ein Symbol mit dem Code 214. Was ist das? Das Divisionszeichen, der Buchstabe Ö oder etwas anderes? Ohne den Quellcode, der diese Datei erstellt hat,

    Unicode und UTF-8


    Um diese Mehrdeutigkeit zu beseitigen, können Sie Unicode verwenden. Die Unicode-Kodierung, UTF-8 genannt, unterstützt grundlegende ASCII-Zeichen ohne Änderungen, erlaubt aber auch eine praktisch unbegrenzte Anzahl anderer Zeichen und Zeichen aus dem Unicode-Standard. Aufgrund seiner Flexibilität wird UTF-8 in mehr als 85% der Webseiten verwendet, die zum Zeitpunkt der Erstellung dieses Artikels vorhanden waren. Dies bedeutet, dass beim Lesen von Textdateien am besten UTF-8 verwendet wird. Wenn die Dateien nur ASCII-Zeichen enthalten, werden sie korrekt gelesen. Sie erhalten jedoch auch eine Versicherung, falls andere Zeichen in UTF-8 codiert sind. Glücklicherweise ist der Python 3-String-Datentyp standardmäßig für die Unterstützung von Unicode ausgelegt.

    Selbst unter Unicode gibt es Situationen, in denen im Text Werte enthalten sind, die nicht erfolgreich dekodiert werden können. Die Open-Funktion in Python empfängt einen zusätzlichen Fehlerparameter, der bestimmt, wie Codierungsfehler beim Lesen oder Schreiben von Dateien behandelt werden. Der Standardwert ist 'strict', mit dem ein Fehler ausgelöst wird, wenn ein Codierungsfehler erkannt wird. Andere nützliche Werte sind 'ignore' (überspringt das Zeichen, das den Fehler verursacht hat); 'ersetzen' (das Zeichen wird durch eine spezielle Markierung ersetzt - normalerweise?); 'backslashreplace' (das Zeichen wird durch die Escape-Sequenz mit einem \ ersetzt) ​​und 'Surrogateescape' (das beleidigende Zeichen wird beim Lesen in einen privaten Unicode-Codepunkt konvertiert und beim Schreiben in die ursprüngliche Bytefolge zurückgesetzt).

    Stellen Sie sich ein kleines Beispiel einer Datei vor, die ein ungültiges UTF-8-Zeichen enthält, und sehen Sie, wie dieses Zeichen in verschiedenen Modi verarbeitet wird. Schreiben Sie zuerst die Datei mit Bytes und Binärmodus:

    >>> open('test.txt', 'wb').write(bytes([65, 66, 67, 255, 192,193]))

    Als Ergebnis der Befehlsausführung wird eine Datei aus den Zeichen „ABC“ erstellt, gefolgt von drei Nicht-ASCII-Zeichen, die je nach verwendeter Codierungsmethode unterschiedlich angezeigt werden können. Wenn Sie die Datei mit vim anzeigen, sieht das Ergebnis folgendermaßen aus:

    ABCÿÀÁ
    ~


    Versuchen Sie beim Erstellen der Datei, sie im Standardfehlermodus 'strict' zu lesen:

    >>> x = open('test.txt').read()
    Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "/usr/local/lib/python3.6/codecs.py", line 321, in decode
         (result, consumed) = self._buffer_decode(data, self.errors, final)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3:
          invalid start byte


    Das vierte Byte mit einem Wert von 255 ist an dieser Position kein gültiges UTF-8-Zeichen. Daher wird eine Ausnahme im 'strikten' Modus ausgelöst. Und nun sehen wir, wie andere Fehlerbehandlungsmodi mit derselben Datei umgehen, ohne zu vergessen, dass die letzten drei Zeichen einen Fehler auslösen:

    Bild

    Wenn Sie möchten, dass die problematischen Zeichen einfach verschwinden, verwenden Sie den Modus "Ignorieren". Der Ersetzungsmodus markiert nur die Positionen ungültiger Zeichen, während andere Modi versuchen, ungültige Zeichen auf unterschiedliche Weise ohne Interpretation zu speichern.

    21.2.2. Unstrukturierter Text


    Unstrukturierte Textdateien lassen sich am einfachsten lesen, verursachen jedoch die meisten Probleme beim Extrahieren von Informationen. Die Verarbeitung von unstrukturiertem Text kann in den weitesten Grenzen variieren, abhängig von der Art des Textes und davon, was Sie damit tun werden. Daher ist jede ausführliche Erörterung der Textverarbeitung über den Rahmen des Buches hinaus. Ein kurzes Beispiel soll jedoch einige grundlegende Probleme aufzeigen und die Grundlage für die Diskussion von Dateien mit strukturierten Textdaten legen.

    Eines der einfachsten Probleme ist die Auswahl der grundlegenden logischen Einheit in der Datei. Wenn Sie Tausende von Twitter-Nachrichten, einen Moby Dick-Text oder eine Nachrichtensammlung verwenden, müssen diese irgendwie in Blöcke aufgeteilt werden. Bei Tweets kann jeder Block in eine Zeile passen, und das Lesen und Verarbeiten jeder Zeile der Datei ist sehr einfach organisiert.

    Im Fall von Moby Dick und sogar einer separaten Nachricht wird das Problem komplizierter. Natürlich ist der Text des Romans und sogar der Text der Nachrichten normalerweise nicht als Einheit zu betrachten. In diesem Fall müssen Sie entscheiden, welche Blöcke Sie benötigen, und dann eine Strategie zum Aufteilen der Datei in Blöcke ausarbeiten. Sie können den Text vorzugsweise in Absätzen verarbeiten. In diesem Fall sollten Sie ermitteln, wie der Text in Absätze in der Datei unterteilt ist, und den Code entsprechend schreiben. Wenn die Absätze mit den Zeilen der Textdatei übereinstimmen, ist das einfach. Oft besteht ein einzelner Absatz einer Textdatei jedoch aus mehreren Zeilen in einer Textdatei, und Sie müssen hart arbeiten.

    Betrachten wir nun einige Beispiele.

    Nennen Sie mich Ishmael. Vor Jahren Einig - nie , wie lange precisely-- dagegen
    mit wenig oder kein Geld in meiner Tasche, und nichts Besonderes
    mich an Land zu interessieren, ich dachte , dass ich über ein wenig segeln würde
    und den wässrigen Teil der Welt sehen. Es ist eine Möglichkeit,
    die Zirkulation zu kontrollieren.
    Wann immer ich mich grimmig finde über den Mund;
    wann immer es feucht und nieselig ist Ich treffe
    mich während der
    Beerdigung, die ich treffe;
    Du musst
    mich holen
    In den Schritt bewusst Straße und methodisch klopfen
    Menschen Hut ab - das dann, ich Rechnungs IT höchste Zeit, die erhält zum Meer
    wie mit der ich bald ist als mit der CAN. Dies ist mein Ersatz für Pistole und Ball.
    Mit einem philosophischen Schnörkel wirft sich Cato auf sein Schwert;
    Ich gehe ruhig zum Schiff. Daran ist nichts überraschend.
    Es war
    klar, dass sie nicht die gleichen Gefühle fühlte
    .

    Ist Du jetzt einfach da insulare o Stadt der Manhattoes, angegurtet Runde von Kais!
    Wie mit den indischen Inseln von Korallenriffen - Commerce umgibt mit ihrer IT der Brandung.
    Rechts und links führt Sie die Straße in Richtung Wasser. Es ist eine extreme Innenstadt
    Es war die Batterie, wo sie ausgewaschen
    wurde.
    Schauen Sie sich die Menge der Wassergucker dort an.

    In diesem Beispiel (mit dem Beginn des Textes „Moby Dick“) werden die Zeilen mehr oder weniger wie beim Seitenumbruch unterteilt, und Absätze werden durch eine einzige Leerzeile gekennzeichnet. Wenn Sie jeden Absatz als Ganzes bearbeiten möchten, müssen Sie den Text in leere Zeilen aufteilen. Glücklicherweise kann dieses Problem leicht mit der split () -Methode gelöst werden. Jedes Newline-Zeichen im Text wird durch die Kombination "\ n" dargestellt. Natürlich endet die letzte Zeile des Textes jedes Absatzes mit einer neuen Zeile. Wenn die nächste Textzeile leer ist, folgt unmittelbar die zweite neue Zeile:

    Bild

    Das Aufteilen von Text in Absätze ist ein sehr einfacher Schritt in der unstrukturierten Textverarbeitung. Es kann auch erforderlich sein, vor der weiteren Verarbeitung eine zusätzliche Textnormalisierung durchzuführen. Angenommen, Sie möchten die Häufigkeit des Auftretens jedes Wortes in einer Textdatei berechnen. Wenn Sie die Datei nur durch Überspringen aufteilen, wird eine Liste mit Wörtern in der Datei angezeigt. Die Einträge werden jedoch nicht so einfach gezählt, weil und dies wird nicht als dasselbe Wort betrachtet. Damit dieser Code ordnungsgemäß funktioniert, müssen Sie den Text normalisieren, indem Sie die Satzzeichen entfernen und den gesamten Text vor der Verarbeitung in ein Register konvertieren. Im obigen Textbeispiel könnte der Code zum Erstellen einer normalisierten Wortliste folgendermaßen aussehen:

    Bild

    21.2.3. Unstrukturierte begrenzte Dateien


    Unstrukturierte Dateien sind leicht zu lesen, aber die fehlende Struktur ist auch ein Nachteil. Es ist oft praktischer, eine bestimmte Struktur für eine Datei zu definieren, um die Auswahl einzelner Werte zu vereinfachen. In der einfachsten Version ist die Datei in Zeilen unterteilt, und in jeder Zeile ist ein Informationselement gespeichert. Beispielsweise kann es sich um eine Liste von zu verarbeitenden Dateinamen, um eine Liste von Namen von Personen oder um eine Reihe von Temperaturmesswerten eines Fernsensors handeln. In solchen Fällen ist die Datenanalyse sehr einfach organisiert: Sie lesen den String und konvertieren ihn gegebenenfalls in den gewünschten Typ. Dies ist alles, was benötigt wird, um die Datei einsatzbereit zu machen.

    Die Situation ist jedoch nicht so einfach. Oft möchten Sie mehrere miteinander verknüpfte Datenelemente gruppieren, und Ihr Code muss sie zusammen lesen. Üblicherweise werden dazu die miteinander verbundenen Daten in einer Zeile angeordnet und durch ein Sonderzeichen getrennt. In diesem Fall werden beim Lesen jeder Zeile der Datei Sonderzeichen verwendet, um die Daten in Felder aufzuteilen und die Feldwerte in Variablen zur weiteren Verarbeitung zu speichern.

    Die folgende Datei enthält Temperaturdaten in einem begrenzten Format:

    State|Month Day, Year Code|Avg Daily Max Air Temperature (F)|Record Count for
            Daily Max Air Temp (F)
    Illinois|1979/01/01|17.48|994
    Illinois|1979/01/02|4.64|994
    Illinois|1979/01/03|11.05|994
    Illinois|1979/01/04|9.51|994
    Illinois|1979/05/15|68.42|994
    Illinois|1979/05/16|70.29|994
    Illinois|1979/05/17|75.34|994
    Illinois|1979/05/18|79.13|994
    Illinois|1979/05/19|74.94|994

    Die Daten in der Datei werden durch einen vertikalen Balken (|) getrennt. In diesem Beispiel bestehen sie aus vier Feldern: Status, Beobachtungsdatum, durchschnittliche Höchsttemperatur und Anzahl der Stationen, die Daten liefern. Andere Standardbegrenzer sind Tab und Komma. Vielleicht wird das Komma am häufigsten verwendet, aber das Trennzeichen kann ein beliebiges Zeichen sein, das in Werten nicht vorkommt (dazu später mehr). Das Trennen von Daten durch Kommas ist so üblich, dass dieses Format häufig als CSV (Comma-Separated Values, dh durch Kommas getrennte Daten) bezeichnet wird. Dateien dieses Typs werden mit der Erweiterung .csv als Hinweis auf das Format versehen.

    Welches Zeichen auch immer als Trennzeichen verwendet wird, wenn Sie wissen, um welche Art von Zeichen es sich handelt, können Sie Ihren eigenen Python-Code schreiben, um die Zeichenfolge in Felder aufzuteilen und als Liste zurückzugeben. Im vorherigen Fall können Sie die split () -Methode verwenden, um eine Zeichenfolge in eine Liste von Werten zu konvertieren:

    >>> line = "Illinois|1979/01/01|17.48|994"
    >>> print(line.split("|"))
    ['Illinois', '1979/01/01', '17.48', '994']

    Diese Technik ist sehr einfach zu implementieren, aber alle Werte werden in String-Form gespeichert, was für die weitere Verarbeitung unbequem sein kann.

    21.2.4. Csv-Modul


    Wenn Sie häufig Dateien mit Trennzeichen verarbeiten müssen, sollten Sie sich mit dem csv-Modul und seinen Fähigkeiten vertraut machen. Als ich gebeten wurde, mein Lieblingsmodul aus der Standard-Python-Bibliothek zu benennen, rief ich oft das csv-Modul an - nicht weil es spektakulär aussieht (das ist nicht so), sondern weil es mir wahrscheinlich mehr Zeit und mehr Zeit erspart hat von meinen möglichen Fehlern häufiger als jedes andere Modul.
    Das csv-Modul ist ein perfektes Beispiel für eine Python-Philosophie, die sich auf die Batterie bezieht. Obwohl Sie Ihren eigenen Code zum Lesen von Dateien mit Trennzeichen perfekt schreiben können (außerdem ist dies nicht so schwierig), ist die Verwendung des Python-Moduls viel einfacher und zuverlässiger. Das csv-Modul wurde getestet und optimiert und bietet eine Reihe von Funktionen, die Sie selbst kaum realisiert hätten, die jedoch recht bequem und zeitsparend sind.

    Schauen Sie sich die vorherigen Daten an und entscheiden Sie, wie Sie sie mit dem CSV-Modul lesen würden. Der Datenanalyse-Code sollte jede Zeile lesen und das nachfolgende neue Zeilenzeichen entfernen und dann die Zeile in Zeichen aufteilen und hängen Sie die Liste der Werte an die allgemeine Liste der Zeichenfolgen an. Die Lösung könnte ungefähr so ​​aussehen:

    >>> results = []
    >>> for line in open("temp_data_pipes_00a.txt"):
    ...          fields = line.strip().split("|")
    ...          results.append(fields)
    ...
    >>> results
    [['State', 'Month Day, Year Code', 'Avg Daily Max Air Temperature (F)',
           'Record Count for Daily Max Air Temp (F)'], ['Illinois', '1979/01/01',
           '17.48', '994'], ['Illinois', '1979/01/02', '4.64', '994'], ['Illinois',
           '1979/01/03', '11.05', '994'], ['Illinois', '1979/01/04', '9.51',
           '994'], ['Illinois', '1979/05/15', '68.42', '994'], ['Illinois', '1979/
          05/16', '70.29', '994'], ['Illinois', '1979/05/17', '75.34', '994'],
          ['Illinois', '1979/05/18', '79.13', '994'], ['Illinois', '1979/05/19',
          '74.94', '994']]

    Wenn Sie dasselbe mit dem CSV-Modul machen möchten, könnte der Code ungefähr so ​​aussehen:

    >>> import csv
    >>> results = [fields for fields in
             csv.reader(open("temp_data_pipes_00a.txt", newline=''), delimiter="|")]
    >>> results
    [['State', 'Month Day, Year Code', 'Avg Daily Max Air Temperature (F)',
           'Record Count for Daily Max Air Temp (F)'], ['Illinois', '1979/01/01',
           '17.48', '994'], ['Illinois', '1979/01/02', '4.64', '994'], ['Illinois',
           '1979/01/03', '11.05', '994'], ['Illinois', '1979/01/04', '9.51',
           '994'], ['Illinois', '1979/05/15', '68.42', '994'], ['Illinois', '1979/
          05/16', '70.29', '994'], ['Illinois', '1979/05/17', '75.34', '994'],
          ['Illinois', '1979/05/18', '79.13', '994'], ['Illinois', '1979/05/19',
          '74.94', '994']]

    In diesem einfachen Fall ist der Gewinn gegenüber der unabhängigen Implementierung der Lösung nicht so groß. Der Code ist jedoch zwei Zeilen kürzer und ein wenig klarer, und Sie müssen sich keine Sorgen um das Ausschneiden neuer Zeichen machen. Der gegenwärtige Vorteil zeigt sich in komplexeren Fällen.

    Die Daten in diesem Beispiel sind echt, aber in Wirklichkeit wurden sie vereinfacht und bereinigt. Die echten Daten aus der Quelle werden komplexer. Reale Daten enthalten mehr Felder, einige Felder werden in Anführungszeichen eingeschlossen, andere nicht, und das erste Feld ist möglicherweise leer. Das Original ist durch Tabulatoren getrennt, ich zitiere sie jedoch zu Demonstrationszwecken getrennt durch Kommas:

    "Notes","State","State Code","Month Day, Year","Month Day, Year Code",Avg
            Daily Max Air Temperature (F),Record Count for Daily Max Air Temp
            (F),Min Temp for Daily Max Air Temp (F),Max Temp for Daily Max Air Temp
            (F),Avg Daily Max Heat Index (F),Record Count for Daily Max Heat Index
            (F),Min for Daily Max Heat Index (F),Max for Daily Max Heat Index
            (F),Daily Max Heat Index (F) % Coverage
    ,"Illinois","17","Jan 01, 1979","1979/01/
            01",17.48,994,6.00,30.50,Missing,0,Missing,Missing,0.00%
    ,"Illinois","17","Jan 02, 1979","1979/01/02",4.64,994,-
            6.40,15.80,Missing,0,Missing,Missing,0.00%
    ,"Illinois","17","Jan 03, 1979","1979/01/03",11.05,994,-
            0.70,24.70,Missing,0,Missing,Missing,0.00%
    ,"Illinois","17","Jan 04, 1979","1979/01/
            04",9.51,994,0.20,27.60,Missing,0,Missing,Missing,0.00%
    ,"Illinois","17","May 15, 1979","1979/05/
            15",68.42,994,61.00,75.10,Missing,0,Missing,Missing,0.00%
    ,"Illinois","17","May 16, 1979","1979/05/
            16",70.29,994,63.40,73.50,Missing,0,Missing,Missing,0.00%
    ,"Illinois","17","May 17, 1979","1979/05/
            17",75.34,994,64.00,80.50,82.60,2,82.40,82.80,0.20%
    ,"Illinois","17","May 18, 1979","1979/05/
            18",79.13,994,75.50,82.10,81.42,349,80.20,83.40,35.11%
    ,"Illinois","17","May 19, 1979","1979/05/
            19",74.94,994,66.90,83.10,82.87,78,81.60,85.20,7.85%

    Bitte beachten Sie: einige Felder enthalten Kommas. Gemäß den Regeln in solchen Fällen ist das Feld in Anführungszeichen eingeschlossen, um zu zeigen, dass sein Inhalt nicht zum Analysieren und Suchen von Trennzeichen bestimmt ist. In der Praxis (wie in diesem Fall) wird oft nur ein Teil der Felder zitiert, vor allem diejenigen, deren Werte ein Trennzeichen enthalten können. Einige Felder werden jedoch (wie auch in diesem Beispiel) in Anführungszeichen gesetzt, selbst wenn es unwahrscheinlich ist, dass sie ein Trennzeichen enthalten.

    In solchen Fällen werden selbstgezogene Lösungen zu umständlich. Das Aufteilen einer Zeichenfolge durch ein Trennzeichen funktioniert jetzt nicht mehr. Sie müssen sicherstellen, dass bei der Suche nur die Trennzeichen verwendet werden, die sich nicht in den Zeilen befinden. Außerdem müssen Sie die Anführungszeichen entfernen, die sich in einer beliebigen Position befinden können oder sich nirgendwo befinden. Mit dem csv-Modul müssen Sie Ihren Code überhaupt nicht ändern. Da das Komma als Standardbegrenzer betrachtet wird, muss es nicht einmal angegeben werden:

    >>> results2 = [fields for fields in csv.reader(open("temp_data_01.csv",
             newline=''))]
    >>> results2
    [['Notes', 'State', 'State Code', 'Month Day, Year', 'Month Day, Year Code',
           'Avg Daily Max Air Temperature (F)', 'Record Count for Daily Max Air
           Temp (F)', 'Min Temp for Daily Max Air Temp (F)', 'Max Temp for Daily
           Max Air Temp (F)', 'Avg Daily Min Air Temperature (F)', 'Record Count
           for Daily Min Air Temp (F)', 'Min Temp for Daily Min Air Temp (F)', 'Max
           Temp for Daily Min Air Temp (F)', 'Avg Daily Max Heat Index (F)',
           'Record Count for Daily Max Heat Index (F)', 'Min for Daily Max Heat
           Index (F)', 'Max for Daily Max Heat Index (F)', 'Daily Max Heat Index
           (F) % Coverage'], ['', 'Illinois', '17', 'Jan 01, 1979', '1979/01/01',
           '17.48', '994', '6.00', '30.50', '2.89', '994', '-13.60', '15.80',
           'Missing', '0', 'Missing', 'Missing', '0.00%'], ['', 'Illinois', '17',
           'Jan 02, 1979', '1979/01/02', '4.64', '994', '-6.40', '15.80', '-9.03',
           '994', '-23.60', '6.60', 'Missing', '0', 'Missing', 'Missing', '0.00%'],
           ['', 'Illinois', '17', 'Jan 03, 1979', '1979/01/03', '11.05', '994', '-
           0.70', '24.70', '-2.17', '994', '-18.30', '12.90', 'Missing', '0',
           'Missing', 'Missing', '0.00%'], ['', 'Illinois', '17', 'Jan 04, 1979',
           '1979/01/04', '9.51', '994', '0.20', '27.60', '-0.43', '994', '-16.30',
           '16.30', 'Missing', '0', 'Missing', 'Missing', '0.00%'], ['',
           'Illinois', '17', 'May 15, 1979', '1979/05/15', '68.42', '994', '61.00',
           '75.10', '51.30', '994', '43.30', '57.00', 'Missing', '0', 'Missing',
           'Missing', '0.00%'], ['', 'Illinois', '17', 'May 16, 1979', '1979/05/
           16', '70.29', '994', '63.40', '73.50', '48.09', '994', '41.10', '53.00',
           'Missing', '0', 'Missing', 'Missing', '0.00%'], ['', 'Illinois', '17',
           'May 17, 1979', '1979/05/17', '75.34', '994', '64.00', '80.50', '50.84',
           '994', '44.30', '55.70', '82.60', '2', '82.40', '82.80', '0.20%'], ['',
           'Illinois', '17', 'May 18, 1979', '1979/05/18', '79.13', '994', '75.50',
           '82.10', '55.68', '994', '50.00', '61.10', '81.42', '349', '80.20',
           '83.40', '35.11%'], ['', 'Illinois', '17', 'May 19, 1979', '1979/05/19',
           '74.94', '994', '66.90', '83.10', '58.59', '994', '50.90', '63.20',
           '82.87', '78', '81.60', '85.20', '7.85%']]


    »Weitere Informationen zum Buch finden Sie auf der Website des Herausgebers.
    » Inhaltsverzeichnis
    » Auszug

    für Habrozhiteley 20% Rabatt - Python

    Jetzt auch beliebt: