Lerne Coding
Python Tabellen Konvertieren - Tablib
19.05.2021

Mit Tabellen in Python Arbeiten mittels Tablib

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. Minuten

In Python gibt es viele Möglichkeiten um mit JSON, CSV, Pandas DataFrames, YAML oder Excel Daten zu verarbeiten. Aber was ist, wenn man zwischen diesen Formaten einfach Daten hin und her schieben will, sei es weil man mit den Daten in anderen Sprachen weiter Arbeiten muss, oder bei einem Tool einfach viele verschiedene Formate unterstützen möchte ?

Man könnte zum Beispiel mit vielen verschiedenen Modulen für jede Sprache eigene Klassen oder Funktionen bauen. Oder man verwendet ein Modul das möglichst viele Formate unterstützt. Tablib kann das alles bewerkstelligen. Die Stärke von Tablib sehe ich persönlich in den vielen verschiedenen Formaten mit denen wir arbeiten können.

Wie installiere ich Tablib?

Um Tablib zu installieren, benötigst du PIP. Dies ist ein Paketmanager für Python im Artikel "Wie du PIP Installieren und Verwenden kannst?" findest Du alle wichtigen Informationen zu PIP.

Für die Installation brauchst du nur den Befehl eingeben:

pip install tablib

Falls Du direkt alle unterstützten Formate mit installieren willst, kannst Du folgenden Befehl verwenden. Ich empfehle Dir allerdings nur wirklich die Formate zu Installieren, die Du auch benötigst. So kannst Du unnötigen Ballast sparen.

pip install "tablib[all]"

Weiter unten findest Du eine Auflistung aller unterstützten Formate, die Du Dir noch zusätzlich installieren kann.

Github Logojazzband/tablib
4.615 31 593

Python Module for Tabular Datasets in XLS, CSV, JSON, YAML, &c.

Mit Tablib und Datasets Arbeiten

Nun schauen wir uns mal an, wie wir Tablib für Datasets einsetzen können. Um mit Tablib zu starten, müssen wir dieses erst einmal importieren nach dem wir das Modul Tablib mittels PIP im vorherigen Schritt bereits Installiert haben. Standardmäßig kürze ich mir das tablib Keyword auf tl um es in kurzer Schreibweise im nachfolgenden Code verwenden zu können.

import tablib as tl

Ein Dataset Objekt Erstellen

Um ein neues Dataset Objekt zu erstellen, kannst Du die Methode Dataset() verwenden. Diese ist ein komplett leeres Element. Wie der Name schon sagt, ist ein Dataset eine Ansammlung von Daten.

data = tl.Dataset()

Alternativ kannst du auch Daten vordefinieren. Für die Befüllung des Datasets geht man wie folgt vor:

header = ["kopf1","kopf2"]

content = [("1","2"),("3","4")]

data = tl.Dataset(*content,headers=header)

Eine Tabelle importieren

Natürlich kannst Du auch Tabellen aus Dateien importieren, diese bearbeiten und sogar diese in ein anderes Format exportieren. Aber Vorsicht, nicht alle Formate sind für Import und Export gleichermaßen geeignet. Weiter unten findest Du eine Liste mit allen Formaten und dessen Eigenschaften.

Um eine Datenset zu importieren, wird die load Methode verwendet, als zweiter Parameter kann das Format optional angegeben werden, allerdings erkennt Tablib beim Import der Daten die meisten Formate automatisch. Ich hatte bisher kein Fall, wo ich diese optionale Angabe selber definieren musste. Diese Funktion ist für Nutzerinterfaces vielleicht interessant, wo man das Format bereits vordefinieren möchte.

So könnte zum Beispiel eine Import mit dem Contextmanager für Files bei Python aussehen:

with open('table-example.csv', 'r') as fh:
    data = tl.Dataset().load(fh)

Falls eure CSV Datei keine Kopfzeile hat könnt ihr headers=False verwenden, um so nicht die erste Zeile als Header zu setzen. Das funktioniert zum Beispiel bei den Formaten csv, tsv, dbf, xls, xlsx.

Kopfzeile im Dataset hinzufügen

Nun haben wir zum Beispiel unser Test Tabelle Importiert, natürlich können wir auch die Werte in der Kopfzeile verändern. An diese kommen wir über das headers Attribut. Dort drin befindet sich eine Liste mit allen Kopfzeilen Werten. Diese können wir überschreiben.

data.headers = ["Datum","Wert 1","Wert 2"]

Um einzelne Werte zu ändern, können wir über den entsprechenden Index in der Liste auf dieses Element zugreifen.

data.headers[1] = "Test"

Zeilen im Dataset hinzufügen

Du kannst auch Zeilen in einer Tabelle einfach hinzufügen mit der Append Methode. Hinzugefügt wird immer eine Liste von Werten.

Das sieht wie folgt aus, dabei ist zu Beachten das die Felder Anzahl mit der Spalten Anzahl übereinstimmen muss, sonst schmeißt Tablib eine InvalidDimensions Exception.

imported_data.append(["Feld 1","Feld 2"])
Tipp

Um einer InvalidDimensions Execption vorweg zugreifen, kannst Du mittels data.width die aktuelle Spalten/Column Anzahl ermitteln und vorher Deine Liste auf die korrekte Länge prüfen.

Spalten im Dataset hinzufügen

Natürlich kannst Du auch ganze Spalten für jede Zeile einem Datenset hinzufügen. Dabei ist ebenfalls zu beachten, das für jede Zeile ein Wert gesetzt werden muss, sonst erhalten wir wieder eine InvalidDimensions Exception. Um nun eine Spalte hinzuzufügen, können wir die Methode append_col verwenden. Dort können wir ebenfalls einen Spalten Namen definieren.

data.append_col([10,20],header="numbers")
Tipp

Um zu prüfen ob unsere Liste der notwendigen Länge entspricht, damit wir keine InvalidDimensions Exception erhalten, können wir auf die Zeilen Anzahl per data.height zugreifen und entsprechend prüfen, und dann zum Beispiel mit Platzhalter ergänzen.

Daten aus dem Datenset Entfernen

Das Entfernen von Spalten und Zeilen in einem Dataset geht sehr einfach.

Spalten entfernen mittels del data['numbers']

Mit diesem Befehle kannst Du einen bestimmte Range von Zeilen entfernen.

Zeilen entfernen mittels del data[0:20]

Daten Exportieren

Das Daten Exportieren geht sehr einfach mit dem Folgenden Befehle:

data.export('json') # Exportieren nach JSON

data.export('xls') # Exportieren nach XLS

Anschließend kannst Du den Output in eine Datei speichern. Bei XLS erhätst du zum Beispiel binäre Daten, die erst abgespeichert werden müssen, damit Du dann diese Datei im Entsprechenden Programm lesen kannst.

Bei JSON, CSV oder auch YAML erhältst du einfache Text Strings zurück zum Beispiel.

Welche Formate unterstützt Tablib alles?

Tablib unterstützt von sich aus schon einige Formate, andere müssen zusätzlich Installiert werden. Einige Formate sind nur für den Export geignet. In der untenstehende Auflistung erhältst du eine Übersicht über alle Formate, die Tablib unterstützt.

Das Feld Unterstützung liefert Informationen darüber, ob nur ein Export in das Format möglich ist, oder auch ein Import von Dateien in dem Entsprechenden Format.

Das Feld Verfügbarkeit liefert eine Information darüber ob das Format nachinstalliert werden muss oder standardmäßig verfügbar ist.

Bei einigen der nachfolgenden Formate habe ich ein Feld mit einem PIP Befehl angelegt, da diese Formate nicht Standardmäßig verfügbar sind. Desweiteren kannst Du die Namen der verschiedenen Formate in den eckigen Klammern auch kommasepariert erweitern, falls Du direkt mehrere Formate installieren willst.

CLI - Format

Das CLI Format ist für eine Terminal Ausgabe gedacht. Es ist selbst kein richtiges Format sondern es können für die Tabelle noch einmal andere verschiedene Ausgabeformate ausgewählt werden.

Folgende Formate können ausgewählt werden:

>>> import tabulate
>>> print(list(tabulate._table_formats))
['simple', 'plain', 'grid', 'fancy_grid', 'fancy_outline', 'github', 'pipe', 'orgtbl', 'jira', 'presto', 'pretty', 'psql', 'rst', 'mediawiki', 'moinmoin', 'youtrack', 'html', 'unsafehtml', 'latex', 'latex_raw', 'latex_booktabs', 'latex_longtable', 'tsv', 'textile']
CLI Format Übersicht

Unterstützung

Nur Export

Verfügbarkeit

Optional

PIP Befehl

pip install "tablib[cli]"

CSV - Format

Das CSV Format ist ein Standard Tabellen Format für Comma Seperated Values. Dieses Format kann mit Tablib sowohl Importiert als auch Exportiert werden.

Zum CSV Format hab ich noch einen eigenen Artikel gemacht, "In Python CSV-Dateien erstellen und lesen", dort findest du weitere interessante Informationen zum CSV Format.

CSV Format Übersicht

Unterstützung

Import & Export

Verfügbarkeit

Standard

TSV - Format

Das TSV Format ist eine Art vom CSV Format in etwa bzw. vom DSV Format. DSV steht für delimiter-seperated Values, in diesem Fall von TSV steht das T für Tabulator. TSV ist also ein Tabulator Separiertes Tabellen Format.

TSV Format Übersicht

Unterstützung

Import & Export

Verfügbarkeit

Standard

DBF - Format

Das DBF Format basiert auf dem dBASE Format. Bei diesem Format ist zu beachten, das die Daten als Binary geöffnet werden, da es sich um binäre Daten handelt.

DBF Format Übersicht

Unterstützung

Import & Export

Verfügbarkeit

Standard

DF - Pandas DataFrame - Format

Dataframes ist nicht wirklich ein Datei Format, sondern ein Format das Python intern beim Modul pandas zum Einsatz kommt.

Pandas ist ein Modul um Daten zu Filtern und nach bestimmten Kriterien neu aufzubauen. Wie wäre es für eine Spalte immer die Summe automatisch zu berechnen? Diese und vieles weitere ist mit dem Pandas Modul möglich. Im Artikel "Wie Data Science funktioniert - Mit COVID-19 Daten!" findest Du einige Anwendungsbeispiel für Pandas, falls dich das Thema mehr interessiert.

DF Format Übersicht

Unterstützung

Import & Export

Verfügbarkeit

Optional

PIP Befehl

pip install "tablib[pandas]"

HTML - Format

Bei dem HTML Format wird eine HTML Tabelle erstellt, die dann zum Beispiel ganz einfach auf einer Webseite ausgegeben werden kann. Da diese nur ein Export Format ist, eignet es sich zum Beispiel besonders gut in Kombination mit Flask oder Django, um eine CSV oder Excel Tabelle in eine Tabelle für die Webseite zu konvertieren, ohne einen eigenen Parser oder ähnliches dafür schreiben zu müssen.

HTML Format Übersicht

Unterstützung

Nur Export

Verfügbarkeit

Optional

PIP Befehl

pip install "tablib[html]"

JIRA - Format

Das JIRA Format ist ein reines Ausgabe Format ähnlich zu CSV oder einem DSV Format. Der unterschiedlich liegt darinnen das der Header einen anderen Delimiter erhält als die Nachfolgenden Zeilen.

Dieses Format ist aus der Software Jira bekannt. Diese Software ist zum Projektmanagement, Aufgabenmanagement und Bug Management geeignet.

Im Nachfolgenden findest Du einmal ein Beispiel, dort kannst Du sehen das in der ersten Spalte immer mit zwei | (pipe-Zeichen) gearbeitet wird, in den Nachfolgenden nur noch mit einem pipe-Zeichen.

||Datum||Wert 1||Wert 2||Wert 3||Wert 4||Wert 5||Wert 6||
|01.01.2021|101|102|103|104|105|106|
|02.01.2021|107|108|109|110|111|112|
|03.01.2021|113|114|115|116|117|118|
|04.01.2021|119|120|121|122|123|124|
|05.01.2021|125|126|127|128|129|130|
|06.01.2021|131|132|133|134|135|136|
|07.01.2021|137|138|139|140|141|142|
Jira Format Übersicht

Unterstützung

Nur Export

Verfügbarkeit

Standard

JSON - Format

Das JSON Format ist kein reines Tabellen Format. Eher ist es ein Austausch Format was viele verschiedene Elemente Kombinieren kann. Es ist möglich es als einfachen Key Value Store zu nutzen, oder auch Arrays abzuspeichern. Natürlich funktionieren auch Multi Dimensionale Arrays und Booleans.

Zum JSON Format in Python habe ich noch einen Extra Artikel gemacht: "JSON in Python korrekt verwenden!". Dort kannst Du für mehr Tipps und Arbeitsmöglichkeit mit JSON in Python noch einmal reinschauen.

JSON Format Übersicht

Unterstützung

Import & Export

Verfügbarkeit

Standard

LaTeX - Format

Das LaTeX ist vorallem ein Format das in der Wissenschaft zum Einsatz kommt. Vorallem in den Naturwissenschaften und Mathematik ist es sehr belieb, zum Beispiel für Diplomarbeiten und Dissertationen.

Also macht es natürlich Sinn, seine Tabellen von CSV direkt in LaTeX umwandeln. Angenommen ein Python Programm gibt Dir CSV aus, Du brauchst es aber für die Uni eigentlich im LaTeX Format und willst Dir das Tabellen schreiben möglichst einfach gestalten.

Eine Ausgabe könnte zum Beispiel so aussehen:

LaTeX Beispiel
LaTeX Beispiel

Wer mit dem LaTeX Format auf Anhieb nichts anfangen kann, der kann sich es in etwa wie ein komplexeres Markdown für Dokumente vorstellen, vereinfacht gesagt.

LaTeX Format Übersicht

Unterstützung

Nur Export

Verfügbarkeit

Standard

ODS - Format

Das ODS ist ein Open Document Format für Tabellen. Diese Format ist im Prinzip eine freie Alternative zu XLS und XLSX Format und kann mit den meisten Tabellenprogrammen wie Excel oder auch mit den freien Programmen wie OpenOffice oder LibreOffice geöffnet werden.

Es ist ein binäres Format in Python, das heißt Du musst die Daten direkt in eine Datei speichern. Du kannst nicht den Output direkt lesen wie zum Beispiel beim CSV Format.

Kleiner Tipp für Apple Nutzer

Wenn ihr Rechtsklick auf das ODS Dokument macht und dann TextEdit auswählt, könnt ihr den Inhalt der Tabelle kopieren und dann in Numbers einfügen um mit diesem Programm einfach weiter arbeiten zu können.

Ein kleines Beispiel wie Du eine CSV Datei in eine ODS Datei umwandeln könntest in ein paar Zeilen Python Code:

with open('table-example.csv', 'r') as fh:
    imported_data = Dataset().load(fh)

    with open('example.ods', 'wb') as f:
        f.write(imported_data.export("ods"))
ODS Format Übersicht

Unterstützung

Nur Export

Verfügbarkeit

Optional

PIP Befehl

pip install tablib[ods]

RST - Format

Das RST Format steht für "reStructuredText" dieses Format ist ähnlich zum Markdown Format, es ist dazu da Text zu Formatieren, und in verschiedenen Sprachen zu Parsen. Allerdings ist es nicht sehr verbreitet im Vergleich zu Markdown.

Eine Beispiel Tabelle könnte so aussehen:

==========  ====  ====  ====  ====  ====  ====
  Datum     Wert  Wert  Wert  Wert  Wert  Wert
             1     2     3     4     5     6  
==========  ====  ====  ====  ====  ====  ====
01.01.2021  101   102   103   104   105   106 
02.01.2021  107   108   109   110   111   112 
03.01.2021  113   114   115   116   117   118
RST Format Übersicht

Unterstützung

Nur Export

Verfügbarkeit

Standard

XLS & XLSX Format

Das XLS Format ist das Microsoft Excel Format für Tabellen, aber es ist auch der Vorgänger vom moderneren XLSX Format. Übrigens der Unterschied zwischen XLSX und XLS ist eine art ZIP Komprimierung, die beim Moderen Format noch stattfindet.

Kleiner Hinweis

XLS Dateien können auch in neueren Excel Versionen geöffnet werden allerdings können XLXS Dateien nicht in älteren Excel Versionen verwendet werden. Also falls Dir der Support für ältere Systeme wichtig ist solltest Du XLS verwenden da dieses Format in allen Excel Versionen verwendet werden kann.

XLS / XLSX Format Übersicht

Unterstützung

Import & Export

Verfügbarkeit

Optional

PIP Befehle

pip install "tablib[xlsx]" oder pip install "tablib[xls]"

YAML - Format

Das YAML Format ist ähnlich zum JSON Format, aber arbeitet weniger mit Klammern, sondern mehr über Einrückungen. Allerdings gibt es auch spezielle Fälle wo weiterhin Klammern eingesetzt werden.

YAML Format Übersicht

Unterstützung

Import & Export

Verfügbarkeit

Optional

PIP Befehl

pip install "tablib[yaml]"

Fazit

Tablib ist ein sehr schönes Modul, um mit Tabellen in Python zu arbeiten. Vor allem für das Konvertieren zwischen verschiedenen Formaten ist Tablib sehr gut geeignet. Natürlich kann man auch einfache Datenveränderungen in Tabellen vornehmen. Grundsätzlich würde ich für aufwändigere Manipulationen und Filterungen von Daten allerdings Pandas empfehlen. Da man auch Pandas Dataframes importieren und exportieren kann, kann man es auch als zusätzliche Schnittstelle für den Import und Export von Daten ansehen.

Schreibe mir doch gerne Deinen Verwendungszweck von Tablib in die Kommentare.

Bildquelle - Vielen Dank an die Ersteller:innen für dieses Bild
Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Python Tabellen Konvertieren - Tablib"!

Kommentar schreiben

Vom Autor Empfohlen
close