Tutorials auf die einfachste Weise

Los gehts: Sehr schnell nach der Veröffentlichen des ersten Tutorials zum Lesen von csv-Daten mit Python, kamen von zwei Identi.ca-Teilnehmern der Hinweis auf das Python csv-Modul. Darauf möchte ich nun eingehen.

Reaktionen auf das erste Tutorial

Erstaunlicherweise kamen buchstäblich Sekunden nach der Veröffentlichung des ersten Tutorials von lutzgh und evgeni über identi.ca zwei Reaktionen in gleiche Richtung. Beide wiesen mich auf das csv-Modul hin, welches genutzt werden kann, um diverse Daten zu importieren.

Natürlich kam mir sofort der Gedanke, warum ich das Modul nicht selber entdeckt habe. Ich muss zugeben, dass ich gar nicht gesucht habe. Mir ist auf Anhieb die Lösung mit den regulären Ausdrücken eingefallen. Doch, aus zwei Gründen bin ich glücklich, dass es nun so gekommen ist:

  1. Auf dieser Grundlage lässt sich ein weiterer netter Blog-Artikel schreiben :-) .
  2. Aus eins mach zwei: Ursprünglich als alleinstehendes Thema geplant, ist es nun in zunächst zwei verschiedenen Ausführungen vorhanden, die sich prächtig ergänzen. Dadurch ergibt sich eine breitere Grundlage und noch mehr Wissen für meine Leser.

Also nur Vorteile für alle im Thema interessierten.

Das csv-Modul

Das csv-Modul, welches es laut der Python-Dokumentationseite, seit der Version 2.3 gibt, unterstützt den Programmierer in seiner Arbeit beim Import und Export von Daten, welche tabellarisch im csv-Format gespeichert sind oder werden sollen. Dafür stellt es diverse Funktionen zur Verfügung, von denen ich die reader() und writer()-Funktionen als die für mich wichtigsten einstufe.

Sehr interessant ist die Möglichkeit mit Hilfe des csv-Moduls, Excel-Daten zu importieren und in Excel-Stil zu exportieren. Dazu muss lediglich ein bestimmter Parameter übergeben werden, der das Format definiert. Das scheint mir einer der größten Vorteile dieses Moduls zu sein.

Datensatz und Import der Daten mit dem csv-Modul

Wie bereits im ersten Tutorial wird auch hier der kleine Beispiel-Datensatz von walkingrandomly.org übernommen:
header 1;
header 2;
1031,-948,-76, ,"12"
507,635,-1148, ,"34"
-1031,948,750, ,"45"
-507,-635,114, ,"67"

Diese Zeilen sollen nun mit dem csv-Modul in das Programm importiert werden und in drei verschiedenen Listen gespeichert werden. Dabei interessieren uns lediglich die Daten, die nicht Kopfdaten sind oder in Anführungszeichen stehen. Dazu habe ich folgendes Python-Skript geschrieben:

import csv
fileO = open('walking_example.dat','r')
csvreader=csv.reader(fileO, delimiter=',')
k= []; l = []; m = [];

for row in csvreader:
    if len(row) > 1:
        k.append(float(row[0]))
        l.append(float(row[1]))
        m.append(float(row[2]))

print(k,l,m)

fileO.close()

Schrittweise erklärt

1.Zeile: Import des csv-Moduls

2.Zeile: Erstellen eines file-Objekts, welcher die Datei mit dem gezeigten Datensatz enthält.

3.Zeile: Einlesen der Daten von fileO mit der reader()-Funktion des csv-Moduls. Die Funktion erwartet mindestens einen Übergabeparameter und zwar das file-Objekt. Des Weiteren kann ein sogenannter Dialekt vorgegeben werden, welcher für sich die Struktur der csv-Daten definiert. Ein Dialekt könnte zum Beispiel Excel sein (dialect=’excel’). Weitere optionale Argumente wie das Trennungszeichen (delimiter=’,’) können hinzugefügt werden.

4.Zeile: Initialisieren der Listen, mit welchen weiter gerechnet werden soll.

7-10.Zeile: Das Auslesen der importierten Daten erfolgt an dieser Stelle. Die reader()-Funktion liest die Daten zeilenweise ein, dabei spielt es zunächst keine Rolle, ob es Kopfdaten sind oder nicht. Dieses Vorwissen muss bei der vorgestellten Methode vorhanden sein. Im Beispiel haben wir zwei Zeilen mit Kopfdaten, welche ignoriert werden sollen. Dies geschieht über die Abfrage der Länge der Liste row. Zuletzt werden in den Zeilen noch die Listen k,l,m um die ersten drei Spalten erweitert.

11-12.Zeile: Ausgabe der Listen und schließen des file-Objekts.

Schlusswort

Die Vorteile des csv-Moduls im Vergleich zu der Lösung mit regulären Ausdrücken liegen auf der Hand. Zum einen ist der Import effizienter und einfacher zu schreiben und zum anderen ist die Fehleranfälligkeit nicht so hoch.

Auf der anderen Seite stellen die regulären Ausdrücke eine viel allgemeinere Methode dar, Daten zu importieren. Hierbei muss lediglich die Struktur der Daten bekannt sein, Kopfzeilen werden automatisch ignoriert. Des Weiteren stellen zusätzliche Störungen in den Daten für reguläre Ausdrücke kein Problem dar.

Sollte ich jemals in die Verlegenheit kommen, mich zwischen den zwei Lösungen entscheiden zu müssen, so werde ich natürlich das dem Problem am besten angepasste nutzen. Das heißt: bei relativ sauberen Daten das csv-Modul und bei stark ungeordneten Daten die regulären Ausdrücke.

Nun hoffe ich auf konstruktive Kritik!

Scribtee - Designer T-Shirts

Artikel aus der selben Kategorie:

Es gibt noch keine Kommentare zu “Python Tutorial: Lesen von csv-Daten 2”.
Jede Meinung ist willkommen!

Meinungsfreiheit für alle!