HOWTO · Python

Drucken mit Spaltenausrichtung in Python

Erfahren Sie, wie Sie Spalten in Python mit print(), format(), f-strings und Bibliotheken wie tabulate und pandas ausrichten. Dieser Leitfaden behandelt Techniken zum Formatieren tabellarischer Daten und sorgt für eine saubere, gut lesbare Ausgabe. Perfekt für Python-Entwickler!

Auf dieser Seite

Die Funktion print() hat sich in Python weiterentwickelt: In Python 2 war sie eine Anweisung, in Python 3 ist sie eine Funktion. Eine korrekt formatierte Ausgabe sorgt für Übersichtlichkeit, insbesondere bei tabellarischen Daten.

Dieses Tutorial stellt verschiedene Methoden vor, um in Python mit Spaltenausrichtung zu drucken. Wenn Sie mehrere Argumente effizient ausgeben und dabei Spalten ausrichten müssen, lesen Sie unseren Leitfaden zum Drucken mehrerer Argumente in Python.

Spaltenausrichtung mit der %-Formatierung

Die %-Formatierung ist eine der ältesten Methoden, Zeichenketten zu formatieren. Mit %-*s lässt sich ein Abstand definieren, der als Spaltenbreite dient. Der Abstand muss für jede Zeile manuell angepasst werden.

Beispiel:

print("First Name: %-*s Last Name: %s" % (13, "Jim", "Clark"))
print("Age: %-*s Website: %s" % (20, "42", "DelftStack.com"))

Ausgabe:

First Name: Jim           Last Name: Clark
Age: 42                   Website: DelftStack.com

Diese Methode bietet eine einfache Ausrichtung, erfordert aber sorgfältige Anpassungen der Abstände. Der %-Operator erlaubt eine dynamische Spaltenbreite über %-*s, wobei * für eine zur Laufzeit bestimmte Breite steht. Allerdings muss der Abstand für jeden Wert manuell gesetzt werden, was die Methode weniger flexibel macht als neuere Formatierungstechniken.

Spaltenausrichtung mit format()

Die Funktion format() bietet eine flexiblere Möglichkeit, Text innerhalb von Spalten auszurichten. Indem wir Felder mit fester Breite in den geschweiften Klammern definieren, stellen wir eine gleichmäßige Spaltenausrichtung sicher.

Beispiel:

print("{:<10} {:<5} {:<15}".format("First Name:", "Jim", "Last Name: Clark"))
print("{:<10} {:<5} {:<15}".format("Age:", "42", "Website: DelftStack.com"))

Ausgabe:

First Name: Jim   Last Name: Clark
Age:       42    Website: DelftStack.com

Mit {:<10} {:<5} {:<15} geben wir Felder mit fester Breite an, die den Text strukturiert ausrichten. Diese Methode stellt sicher, dass der Text unabhängig von seiner Länge korrekt formatiert wird.

Wenn Sie neben der Spaltenausrichtung auch Zahlen formatieren, könnte unser Leitfaden zum Formatieren von Zahlen mit Kommas in Python hilfreich sein.

Spaltenausrichtung mit f-Strings

f-Strings wurden in Python 3.6 eingeführt und bieten eine kompakte und gut lesbare Möglichkeit, Text zu formatieren, und unterstützen dabei Ausrichtungsangaben.

Beispiel:

print(f"{'First Name: ' + 'Jim':<25} Last Name: {'Clark'}")
print(f"{'Age: ' + '42':<25} Website: {'DelftStack.com'}")

Ausgabe:

First Name: Jim           Last Name: Clark
Age: 42                   Website: DelftStack.com

f-Strings bieten eine intuitive Formatierung bei geringem Schreibaufwand. Die Methode unterstützt die Ausrichtung genau wie format(), mit :<, :> und :^ für linksbündige, rechtsbündige beziehungsweise zentrierte Ausrichtung. Da f-Strings zur Laufzeit ausgewertet werden, sind sie effizient und leicht zu lesen und damit eine ausgezeichnete Wahl für die Spaltenausrichtung.

Spaltenausrichtung mit expandtabs()

Tabulatoren (\t) können die Ausgabe strukturieren, und expandtabs() erlaubt eine explizite Kontrolle der Tabulatorbreite, um Abstände dynamisch anzupassen.

Beispiel:

print(("First Name: Jim" + "\t" + "Last Name: Clark").expandtabs(13))
print(("Age: 42" + "\t" + "Website: DelftStack.com").expandtabs(26))

Ausgabe:

First Name: Jim           Last Name: Clark
Age: 42                   Website: DelftStack.com

Diese Methode ist nützlich bei tabulatorgetrennten Werten (TSV), aber da die Tabulatorbreite von den Terminaleinstellungen abhängt, liefert expandtabs() nicht immer in allen Umgebungen konsistente Ergebnisse.

Linksbündige Ausrichtung mit ljust()

Python bietet die Methoden ljust(), rjust() und center() zur Textausrichtung. Die Methode ljust() sorgt für linksbündige Ausrichtung innerhalb einer festen Breite. Ein tieferes Verständnis der Techniken zum Auffüllen von Zeichenketten vermittelt unser Leitfaden Zeichenketten in Python mit Leerzeichen auffüllen.

Beispiel:

print("First Name: Jim".ljust(40) + "Last Name: Clark")
print("Age: 42".ljust(40) + "Website: DelftStack.com")

Ausgabe:

First Name: Jim                         Last Name: Clark
Age: 42                                 Website: DelftStack.com

Mit ljust(40) wird jede Zeichenkette mit Leerzeichen aufgefüllt, sodass eine gleichmäßige Spaltenbreite entsteht.

Spaltenausrichtung mit tabulate

Das Modul tabulate bietet eine einfache Möglichkeit, strukturierte Daten in ausgerichteten Spalten zu formatieren. Es ist besonders nützlich für tabellarische Daten, die gleichmäßige Abstände erfordern, ohne die Ausrichtung für jede Zeile manuell anpassen zu müssen.

Um tabulate zu verwenden, müssen Sie es zuerst installieren. Sie können das Modul mit pip installieren:

pip install tabulate

Nach der Installation bestimmt tabulate automatisch die passende Spaltenbreite und formatiert die Ausgabe übersichtlich. Mit tablefmt="plain" bleibt die Ausgabe in textbasierten Umgebungen einfach und gut lesbar, ohne unnötige Tabellenrahmen.

Beispiel:

from tabulate import tabulate

data = [["First Name:", "Jim", "Last Name: Clark"],
        ["Age:", "42", "Website: DelftStack.com"]]

print(tabulate(data, tablefmt="plain"))

Ausgabe:

First Name:  Jim  Last Name: Clark
Age:         42   Website: DelftStack.com

Spaltenausrichtung mit pandas

Beim Umgang mit großen Datensätzen bietet die Bibliothek pandas eine strukturierte Möglichkeit, tabellarische Daten effizient zu formatieren und auszurichten. Wenn Sie mit strukturierten Daten arbeiten, müssen Sie möglicherweise auch eine Liste in einen Pandas DataFrame umwandeln, um sie effizient zu verarbeiten. Anders als bei der manuellen Formatierung sorgt pandas unabhängig von der Datensatzgröße für eine gleichmäßige Spaltenausrichtung.

Beispiel:

import pandas as pd

# Create a DataFrame with fixed column widths for better alignment
data = {"Column 1": ["First Name:", "Age:"],
        "Column 2": ["Jim", "42"],
        "Column 3": ["Last Name: Clark", "Website: DelftStack.com"]}

df = pd.DataFrame(data)

# Adjust column width for better alignment
col_width = max(df.map(lambda x: len(str(x))).max()) + 2
df_aligned = df.map(lambda x: str(x).ljust(col_width))

print(df_aligned.to_string(index=False, header=False))

Ausgabe:

First Name:               Jim                       Last Name: Clark         
Age:                      42                        Website: DelftStack.com  

Die maximale Spaltenbreite berechnen

col_width = max(df.map(lambda x: len(str(x))).max()) + 2
  • Dieser Schritt sorgt für gleichmäßige Abstände über alle Spalten, indem er die Länge der längsten Zeichenkette im Datensatz bestimmt.
  • Die Funktion map() wendet len(str(x)) auf jeden Wert im DataFrame an und stellt sicher, dass die Zeichenkettenlängen korrekt berechnet werden. (map() ist der elementweise Ersatz für applymap(), das in pandas 2.1 als veraltet markiert und in pandas 3.0 entfernt wurde.)
  • Die Funktion max() ermittelt den größten Wert, und +2 fügt zusätzliche Polsterung für die Lesbarkeit hinzu.

Linksbündige Ausrichtung auf jede Zelle anwenden

df_aligned = df.map(lambda x: str(x).ljust(col_width))
  • Die Funktion map() wird erneut verwendet, diesmal wendet sie ljust(col_width) auf jeden Wert an.
  • ljust(col_width) sorgt dafür, dass alle Werte innerhalb einer einheitlichen Spaltenbreite linksbündig ausgerichtet sind und eine Fehlausrichtung vermieden wird.

Die Tabelle als reinen Text ausgeben

print(df_aligned.to_string(index=False, header=False))
  • to_string(index=False, header=False) entfernt Index und Kopfzeilen des DataFrames und erzeugt eine saubere, spaltenausgerichtete Ausgabe.

Fazit

Es gibt mehrere Wege, in Python eine Spaltenausrichtung zu erreichen, und jeder eignet sich für andere Anwendungsfälle. Die folgende Tabelle vergleicht die besprochenen Methoden:

Methode Flexibilität Lesbarkeit Bester Anwendungsfall
%-Formatierung Niedrig Mittel Einfache Fälle mit festen Breiten
format() Hoch Hoch Allgemeine Formatierung
f-Strings Hoch Sehr hoch Lesbare und effiziente Formatierung
expandtabs() Mittel Niedrig Tabulatorbasierte Ausrichtung
ljust() Mittel Hoch Linksbündige Ausrichtung sicherstellen
tabulate Hoch Sehr hoch Strukturierte Texttabellen formatieren
pandas Hoch Hoch Große Datensätze verarbeiten

Jede Methode hat ihre eigenen Vorteile:

  • format() und f-Strings bieten Flexibilität und Lesbarkeit und eignen sich ideal für die allgemeine Textformatierung.
  • expandtabs() kann für die Ausrichtung tabulatorgetrennter Werte nützlich sein, aber die Ausrichtung kann je nach Terminaleinstellungen variieren.
  • ljust() bietet eine einfache Möglichkeit, Text linksbündig auszurichten, wenn die Formatierungsanforderungen gering sind.
  • tabulate eignet sich hervorragend, um strukturierte Tabellen mit minimalem Aufwand zu erzeugen.
  • pandas ist die beste Wahl für große Datensätze, bei denen eine strukturierte Ausrichtung ohne manuelle Anpassungen erforderlich ist.

Für einfache Textformatierung sind format() oder f-Strings die besten Optionen. Für strukturierte tabellarische Daten bieten tabulate und pandas eine automatisierte Formatierung, die eine gleichmäßige Ausrichtung sicherstellt. Wenn Sie mit Matrizen arbeiten, lesen Sie Matrizen in Python drucken für weitere Techniken zur strukturierten Ausgabe. Die Wahl der richtigen Methode hängt von der Komplexität der Daten und den Anforderungen an die Ausgabe ab.