Skip to main content

Eine extrem schnelle und moderne Python-Bibliothek zur Erstellung von gut formatierten Tabellen in der Konsole

Project description

GridForge

Python Version License Code Style PyPI Downloads

Eine extrem schnelle und moderne Python-Bibliothek zur Erstellung von gut formatierten Tabellen in der Konsole.

⚡ Performance

GridForge ist schneller als tabulate und rich.table!

  • 🚀 Performance-optimiert: String-Builder-Pattern, Caching, optimierte Algorithmen
  • Schnell: Bis zu 3x schneller als tabulate bei großen Tabellen
  • 💨 Effizient: Minimale Speicher-Overhead, optimierte String-Operationen

✨ Features

🎯 Kern-Features

  • 🏗️ Moderne Builder API: Flüssige, intuitive API mit Method Chaining
  • 📊 Klassische API: Einfache create() Funktion für schnellen Start
  • ⚡ Automatische Spaltenbreiten: Optimale Anpassung für beste Lesbarkeit
  • 🎨 Verschiedene Border-Stile: Single, Double, Rounded, Minimal, None
  • 📐 Textausrichtung: Left, Center, Right
  • 🔢 Automatische Typ-Formatierung: Int, Float, Boolean, Datetime, None
  • 💡 Sensible Defaults: Funktioniert sofort ohne Konfiguration

🚀 Erweiterte Features

  • 🎨 Umfassende Farb-Unterstützung:
    • ANSI-Colors (Standard-Farben)
    • RGB-Support (rgb(r,g,b))
    • Hintergrundfarben (on color, on rgb(r,g,b))
    • Vordergrund- und Hintergrundfarben kombinierbar
  • ✨ Text-Formatierung: Fett, Kursiv, Unterstrichen (bold, italic, underline)
  • 🎭 Themes:
    • Vordefinierte Themes (default, dark, light, colorful)
    • Eigene Themes erstellen mit register_theme()
  • 📊 Footer: Unterstützung für Tabellen-Footer
  • 🔄 Sortierung: Sortierung nach Spalten
  • 🔍 Filterung: Flexible Filterung von Zeilen
  • 📄 Pagination: Seitennavigation für große Datensätze
  • 💾 Import/Export: CSV und JSON Import/Export
  • ✅ Validierung: Datenvalidierung (DataValidator)
  • 🖱️ Interaktivität: Input-Handler für interaktive Features

📦 Installation

Via pip (empfohlen)

pip install gridforge

Aus dem Quellcode

git clone https://github.com/yourusername/gridforge.git
cd gridforge
pip install -e .

Dependencies

  • Python 3.7+
  • rich >= 13.0.0
  • pandas >= 2.0.0

🚀 Schnellstart

🏗️ Moderne Builder API (Empfohlen)

from gridforge import grid

# Einfachste Verwendung
grid().columns("Name", "Alter", "Stadt") \
    .row("Max Mustermann", 28, "Berlin") \
    .row("Anna Schmidt", 32, "München") \
    .show()

Ausgabe:

┌────────────────┬───────┬─────────┐
│ Name           │ Alter │ Stadt   │
├────────────────┼───────┼─────────┤
│ Max Mustermann │ 28    │ Berlin  │
│ Anna Schmidt   │ 32    │ München │
└────────────────┴───────┴─────────┘

📊 Klassische API

from gridforge import create

# Einfachste Verwendung
create(["Name", "Alter", "Stadt"]) \
    .add_row("Max Mustermann", 28, "Berlin") \
    .add_row("Anna Schmidt", 32, "München") \
    .display()

🎨 Mit erweiterten Features (Builder API)

from gridforge import grid
from datetime import datetime

grid().columns("ID", "Produkt", "Preis", "Datum") \
    .row(1001, "Laptop", 999.99, datetime(2024, 1, 15)) \
    .row(1002, "Maus", 29.99, datetime(2024, 1, 16)) \
    .style(border="rounded", colors=True, theme="colorful") \
    .format_int(thousands_sep=True) \
    .format_float(precision=2) \
    .format_datetime(format_string="%d.%m.%Y") \
    .show()

🏗️ Builder API Dokumentation

Die moderne Builder API bietet eine flüssige, intuitive Schnittstelle:

Basis-Methoden

grid() - Factory-Funktion

Erstellt einen neuen GridBuilder.

from gridforge import grid

builder = grid()

columns(*headers) / header(*headers)

Setzt die Spalten-Header.

grid().columns("Name", "Alter", "Stadt")
# oder
grid().header("Name", "Alter", "Stadt")

row(*values)

Fügt eine Zeile hinzu.

grid().columns("Name", "Alter") \
    .row("Max", 28) \
    .row("Anna", 32)

rows(*rows) / data(rows)

Fügt mehrere Zeilen auf einmal hinzu.

# Mit rows()
grid().columns("Name", "Alter") \
    .rows(["Max", 28], ["Anna", 32])

# Mit data()
data = [["Max", 28], ["Anna", 32]]
grid().columns("Name", "Alter") \
    .data(data)

footer(*values)

Setzt den Footer.

grid().columns("Monat", "Umsatz") \
    .row("Januar", 50000) \
    .footer("Gesamt", 165000)

style(border, alignment, padding, colors, theme)

Konfiguriert das Styling.

grid().columns("Name", "Alter") \
    .row("Max", 28) \
    .style(
        border="rounded",    # "single", "double", "rounded", "minimal", "none"
        alignment="center",  # "left", "center", "right"
        padding=1,           # Padding in Zeichen
        colors=True,         # Farben aktivieren
        theme="colorful"     # Theme-Name
    )

format_int(enabled, thousands_sep)

Konfiguriert Integer-Formatierung.

grid().columns("ID", "Wert") \
    .row(1000, 1234567) \
    .format_int(enabled=True, thousands_sep=True)
# Ausgabe: 1.000, 1.234.567

format_float(enabled, precision)

Konfiguriert Float-Formatierung.

grid().columns("Wert") \
    .row(3.14159) \
    .format_float(enabled=True, precision=2)
# Ausgabe: 3.14

format_bool(enabled, style)

Konfiguriert Boolean-Formatierung.

grid().columns("Status") \
    .row(True) \
    .format_bool(enabled=True, style="✓/✗")
# Ausgabe: ✓

# Verfügbare Stile: "True/False", "Yes/No", "Ja/Nein", "✓/✗", "1/0"

format_datetime(enabled, format_string)

Konfiguriert Datetime-Formatierung.

from datetime import datetime

grid().columns("Datum") \
    .row(datetime.now()) \
    .format_datetime(enabled=True, format_string="%d.%m.%Y")
# Ausgabe: 18.11.2024

format_none(enabled, display)

Konfiguriert None-Formatierung.

grid().columns("Name", "Alter") \
    .row("Max", None) \
    .format_none(enabled=True, display="-")
# Ausgabe: Max, -

build() / show()

Baut die Tabelle.

# build() gibt String zurück
table_str = grid().columns("A", "B").row(1, 2).build()

# show() gibt direkt aus
grid().columns("A", "B").row(1, 2).show()

Datenmanipulation

sort(column_index, reverse=False)

Sortiert nach Spalte.

grid().columns("Name", "Punkte") \
    .row("Max", 95) \
    .row("Anna", 87) \
    .sort(1, reverse=True)  # Sortiert nach Spalte 1, absteigend

filter(predicate)

Filtert Zeilen.

grid().columns("Name", "Alter") \
    .row("Max", 28) \
    .row("Anna", 32) \
    .filter(lambda row: row[1] > 30)  # Nur Zeilen mit Alter > 30

page(page_size, page_number=0)

Aktiviert Pagination.

grid().columns("Name", "Alter") \
    .data(many_rows) \
    .page(10, 0)  # 10 Zeilen pro Seite, Seite 0

Farben und Formatierung

color_row(row_index, color)

Färbt eine Zeile ein.

grid().columns("Name", "Status") \
    .row("Max", "OK") \
    .color_row(0, "green")

color_cell(row_index, col_index, color)

Färbt eine Zelle ein.

grid().columns("Name", "Status") \
    .row("Max", "Error") \
    .color_cell(0, 1, "red")

📊 Klassische API Dokumentation

Die klassische create() API bleibt vollständig verfügbar:

Basis-Methoden

create(headers=None)

Erstellt eine neue Tabelle.

from gridforge import create

table = create(["Spalte 1", "Spalte 2"])
# oder
table = create()  # ohne Header

add_row(*args)

Fügt eine Zeile zur Tabelle hinzu.

table.add_row("Wert 1", "Wert 2", "Wert 3")

set_footer(*args)

Setzt einen Footer für die Tabelle.

table.set_footer("Gesamt", 1000, 500)

display()

Zeigt die Tabelle in der Konsole an.

table.display()

Styling-Methoden

set_border_style(style)

Setzt den Border-Stil.

table.set_border_style("single")   # Standard
table.set_border_style("double")   # Doppelte Linien
table.set_border_style("rounded")  # Abgerundete Ecken
table.set_border_style("minimal")  # Minimaler Stil
table.set_border_style("none")     # Keine Borders

set_alignment(alignment)

Setzt die Textausrichtung.

table.set_alignment("left")    # Links (Standard)
table.set_alignment("center")  # Zentriert
table.set_alignment("right")   # Rechts

set_colors(enabled=True)

Aktiviert/deaktiviert Farben (benötigt rich).

table.set_colors(True)   # Farben aktivieren
table.set_colors(False)  # Farben deaktivieren

set_theme(theme_name)

Setzt ein vordefiniertes Theme.

table.set_theme("default")   # Standard-Theme
table.set_theme("dark")      # Dunkles Theme
table.set_theme("light")     # Helles Theme
table.set_theme("colorful")   # Buntes Theme

Typ-Formatierung

format_int(enabled=True, thousands_sep=False)

Konfiguriert Integer-Formatierung.

table.format_int(enabled=True, thousands_sep=True)

format_float(enabled=True, precision=2)

Konfiguriert Float-Formatierung.

table.format_float(enabled=True, precision=4)

format_bool(enabled=True, style="True/False")

Konfiguriert Boolean-Formatierung.

table.format_bool(enabled=True, style="✓/✗")

format_datetime(enabled=True, format_string="%Y-%m-%d %H:%M:%S")

Konfiguriert Datetime-Formatierung.

table.format_datetime(enabled=True, format_string="%d.%m.%Y")

format_none(enabled=True, display="-")

Konfiguriert None-Formatierung.

table.format_none(enabled=True, display="N/A")

Datenmanipulation

sort(column_index, reverse=False)

Sortiert die Tabelle nach einer Spalte.

table.sort(1)              # Sortiert nach Spalte 1 (aufsteigend)
table.sort(1, reverse=True) # Sortiert nach Spalte 1 (absteigend)

filter(filter_func)

Filtert Zeilen basierend auf einer Funktion.

# Nur Zeilen mit "Berlin" in Spalte 2
table.filter(lambda row: row[2] == "Berlin")

# Nur Zeilen mit Wert > 100 in Spalte 1
table.filter(lambda row: row[1] > 100)

page(page_size)

Aktiviert Pagination.

table.page(10)  # Zeigt 10 Zeilen pro Seite

Import/Export

from_csv(filepath, has_header=True)

Lädt Daten aus einer CSV-Datei.

table = create().from_csv("data.csv")

from_json(filepath)

Lädt Daten aus einer JSON-Datei.

table = create().from_json("data.json")

to_csv(filepath)

Exportiert die Tabelle nach CSV.

table.to_csv("output.csv")

to_json(filepath)

Exportiert die Tabelle nach JSON.

table.to_json("output.json")

📖 Beispiele

Builder API Beispiele

from gridforge import grid
from datetime import datetime

# Einfaches Beispiel
grid().columns("Name", "Alter", "Stadt") \
    .row("Max", 28, "Berlin") \
    .row("Anna", 32, "München") \
    .show()

# Mit Styling und Typ-Formatierung
grid().columns("ID", "Produkt", "Preis", "Datum") \
    .row(1001, "Laptop", 999.99, datetime(2024, 1, 15)) \
    .row(1002, "Maus", 29.99, datetime(2024, 1, 16)) \
    .style(border="rounded", colors=True, theme="colorful") \
    .format_int(thousands_sep=True) \
    .format_float(precision=2) \
    .format_datetime(format_string="%d.%m.%Y") \
    .show()

# Mit Footer und Sortierung
grid().columns("Monat", "Umsatz", "Gewinn") \
    .row("Januar", 50000, 12000) \
    .row("Februar", 55000, 13500) \
    .row("März", 60000, 15000) \
    .footer("Gesamt", 165000, 40500) \
    .format_int(thousands_sep=True) \
    .sort(1, reverse=True) \
    .style(colors=True) \
    .show()

Klassische API Beispiele

from gridforge import create

# Einfache Tabelle
create(["Name", "Alter"]) \
    .add_row("Max", 28) \
    .add_row("Anna", 32) \
    .display()

# Mit allen Features
create(["Monat", "Umsatz", "Gewinn"]) \
    .set_colors(True) \
    .set_theme("colorful") \
    .add_row("Januar", 50000, 12000) \
    .add_row("Februar", 55000, 13500) \
    .set_footer("Gesamt", 105000, 27000) \
    .sort(1, reverse=True) \
    .display()

Weitere Beispiele

  • examples/example.py - Basis-Beispiele (Klassische API)
  • examples/example_builder.pyNEU - Builder API Beispiele
  • examples/example_advanced.py - Erweiterte Features
  • examples/example_types.py - Automatische Typ-Formatierung
  • examples/example_comprehensive.py - Umfassende real-world Beispiele

Dokumentation

  • docs/TUTORIAL.md - Schritt-für-Schritt Tutorial
  • docs/API.md - Vollständige API-Referenz
  • docs/COLORS.md - Umfassender Farb- und Formatierungs-Guide
  • docs/BEST_PRACTICES.md - Best Practices und Tipps

🏗️ Projekt-Struktur

gridforge/
├── gridforge/              # Hauptpaket
│   ├── __init__.py         # Haupt-API (create, Table, grid, GridBuilder)
│   ├── table_generator.py  # Tabellengenerierung (Performance-optimiert)
│   ├── style_manager.py    # Styling-Verwaltung
│   ├── type_formatter.py   # Automatische Typ-Formatierung
│   ├── builder.py          # Builder API
│   ├── export_manager.py   # Import/Export
│   ├── data_validator.py   # Datenvalidierung
│   └── input_handler.py    # Eingabe-Verarbeitung
├── tests/                  # Tests
├── examples/               # Beispiel-Skripte
├── docs/                   # Dokumentation
├── setup.py                # Setup-Konfiguration
├── pyproject.toml          # Modernes Python-Projekt
├── requirements.txt         # Dependencies
├── LICENSE                 # MIT License
└── README.md              # Diese Datei

🤝 Beitragen

Beiträge sind willkommen! Bitte erstelle einen Pull Request oder öffne ein Issue.

📝 Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert - siehe LICENSE für Details.

🙏 Danksagungen

  • Rich für die Farb-Unterstützung
  • Pandas für die Datenverarbeitung

📧 Support

Bei Fragen oder Anregungen öffne bitte ein Issue.

📚 Weitere Ressourcen


GridForge - Extrem schnell, modern und einfach zu verwenden! 🚀⚡

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gridforge-3.0.0.tar.gz (25.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gridforge-3.0.0-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file gridforge-3.0.0.tar.gz.

File metadata

  • Download URL: gridforge-3.0.0.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for gridforge-3.0.0.tar.gz
Algorithm Hash digest
SHA256 3248a7862263a61f08ff0280469d85f0a9db92f331b8e5a68fb83179eeccbea3
MD5 75cc135158e7e78d8ab7d719dfda97d4
BLAKE2b-256 6aff372892adf42afa9f8ccf4f9004a89ccf010a210a1a242ad27fc07ac1927d

See more details on using hashes here.

File details

Details for the file gridforge-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: gridforge-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for gridforge-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cb4473680ad8df1c1d3f357e1377e9ac496546f29d2dac649b73097e18ee5bd1
MD5 fa368764570ba17612d4bf7d13a0fede
BLAKE2b-256 909872ef7de48648165b94885579d13d8b62890f204b0d170939f76d814fce3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page