Eine extrem schnelle und moderne Python-Bibliothek zur Erstellung von gut formatierten Tabellen in der Konsole
Project description
GridForge
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.py⭐ NEU - Builder API Beispieleexamples/example_advanced.py- Erweiterte Featuresexamples/example_types.py- Automatische Typ-Formatierungexamples/example_comprehensive.py- Umfassende real-world Beispiele
Dokumentation
docs/TUTORIAL.md- Schritt-für-Schritt Tutorialdocs/API.md- Vollständige API-Referenzdocs/COLORS.md- Umfassender Farb- und Formatierungs-Guidedocs/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
📧 Support
Bei Fragen oder Anregungen öffne bitte ein Issue.
📚 Weitere Ressourcen
- Installation & Deployment - Installations-Anleitung und GitHub/PyPI Deployment
- PyPI Publishing - Detaillierte Anleitung zur PyPI-Veröffentlichung
- GitHub Deployment - Schritt-für-Schritt GitHub-Upload
GridForge - Extrem schnell, modern und einfach zu verwenden! 🚀⚡
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3248a7862263a61f08ff0280469d85f0a9db92f331b8e5a68fb83179eeccbea3
|
|
| MD5 |
75cc135158e7e78d8ab7d719dfda97d4
|
|
| BLAKE2b-256 |
6aff372892adf42afa9f8ccf4f9004a89ccf010a210a1a242ad27fc07ac1927d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb4473680ad8df1c1d3f357e1377e9ac496546f29d2dac649b73097e18ee5bd1
|
|
| MD5 |
fa368764570ba17612d4bf7d13a0fede
|
|
| BLAKE2b-256 |
909872ef7de48648165b94885579d13d8b62890f204b0d170939f76d814fce3d
|