Ausgabe in der Konsole als Tabelle formatieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Wie kann ich denn eine Ausgabe in der Konsole wie eine Tabelle formatieren?

Sowas in der Art

Code: Alles auswählen

==========================
|Wert1|   Wert2  | Wert3 |
--------------------------
|  1  | 12345678 | 0.32  |
|  2  |    12345 | 0.3   |
|  3  |      156 | 0.21  |
==========================
Also zentriert, rechtsbündig oder linksbündig, je nach Art der Spalte
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du hast die Suchfunktion nicht benutzt, oder? ;-)
Das Leben ist wie ein Tennisball.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

wenn du mir sagst, welche Stichworte ich verwenden soll? Die Stichwörter, die mir so einfallen, haben nicht geholfen
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich hab mir jetzt mit Tabs geholfen. Schön ist das aber noch nicht.

Xmega Baudrate Calculator
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

"tabelle konsole"
"tabelle ausgeben"
Das Leben ist wie ein Tennisball.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

http://paste.pocoo.org/show/135627/

Ergibt:

Code: Alles auswählen

|a|c|b|
=======
|1|a|5|
|2|b|6|
|3|c|7|
| |d|8|
| |e|9|
| |f| |
| |g| |
| |h| |
| |i| |
| |j| |
=======
Zweiter Tisch:
|Lange Ueberschrift|Wert1|
==========================
|               Ein|    0|
|              paar|    1|
|         Eintraege|    2|
|                  |    3|
==========================
new_display_entry kannst du entsprechend manipulieren um Linksbündigkeit (Meh, seitdem ich zum ersten Mal Computern und Word begegnet bin kann ich das Wort nicht mehr ab, obwohl ich vorher sicher nicht oft drauf stieß) oder anderes zu erreichen, du könntest dir die Funktionen auch zusammen mit dem table übergeben lassen.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi, vielen Danke. Funktioniert echt super. Gibt nur ein Problem. Die Spalten werden nicht in der Reihenfolge ausgegeben, wie sie angelegt werden. Sieht man auch an dem Beispiel. a, b, c sollte es sein, a, c, b wird ausgegeben.

Hab noch keine Idee, wie man das lösen könnte.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

In Dicts ist die Reihenfolge nicht garantiert. Du müsstest column_names_in_order entsprechend sortieren. Oder Du verwendest statt eines Dicts eine Liste aus Tupeln. Dann müsstest Du aber den Code umfangreicher verändern.
MfG
HWK
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

HWK hat geschrieben:In Dicts ist die Reihenfolge nicht garantiert.
Stimmt. Naja, ich lass es erstmal so. Danke für die Tipps.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Code: Alles auswählen

def print_tablular(rows, alignments, heading=True):
    values = [[str(v) for v in row] for row in rows]
    widths = [max(len(row[i]) for row in values) for i in range(len(rows[0]))]
    def align(s, w, a): return {'l': s.ljust, 'r': s.rjust, 'c': s.center}[a](w)
    def print_line(c): print c * (sum(widths) + 3 * len(widths) + 1)
    print_line("=")
    for row in values:
        if heading and len(values) > 1 and row == values[1]: print_line("-")
        print "| %s |" % " | ".join(align(s, w, a) for s, w, a in zip(row, widths, alignments))
    print_line("=")
    
print_tablular([
    ["Wert1", "Wert2", "Wert3"],
    [1, 12345678, 0.32],
    [2, 12345, 0.3],
    [3, 156, 0.21],
], 'crl')
Stefan
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Es gibt das Paket texttable im pypi.
lunar

Allerdings nur für GPL-Programme …
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Vielleicht kannst es ja noch gebrauchen :)

http://pastebin.com/d51d695da
http://pastebin.com/d47720887

~ Chris
Grüßle.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

It's never too late :)

Aber ich schau mir mal texttable an, GPL hin oder her. Ist eh nur ein kleines Tool
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@Chrisber:

- Die "create"-Funktion ist überflüssig, da kann man auch gleich "PyTable" aufrufen. Wenn du unbedingt eine extra Funktion willst, dann reicht auch ein "create = PyTable"
- Du solltest dir PEP 8 bezüglich der Methodennamen durchlesen
- Listen haben eine "extend"-Methode, damit sparst du eine Menge in "addRows".
- "addRows" sollte "addRow" aufrufen und nicht selbst anhängen.
- "show" sollte besser "__str__" heißen.
- Deine while-Schleifen kannst du alle durch for-Schleifen ersetzen!
- Wenn du einen Index beim Iterieren brauchst, dann benutze "enumerate". Hier kannst du aber wunderbar "zip" verwenden.
- Schau dir mal die "join"-Methode von Strings an.
- Du schreibst zwei identische Schleifen für das Zusammensetzen einer Zeile. Das solltest du entweder in eine Funktion auslagern oder geschickt zusammenfassen. Doppelter Code ist immer schlecht.
- Zeilen 30 bis 43 kann man wohl durch die "max"-Funktion zusammenfassen.
Das Leben ist wie ein Tennisball.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Huch, so viel Kritik :)
Danke erst einmal dafür!
Viele Tipps die ich noch nicht kannte. Werde mich morgen mal ransetzen und eine verbesserte Version erstellen :)

Was PEP8 betrifft, dem stehe ich kritisch gegenüber. Ich habe meinen eigenen "Stil" entwickelt der in fast allen Programmiersprachen und Scriptsprachen gleich ist - und das soll auch so bleiben ;)

~ Chris
Grüßle.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Chrisber hat geschrieben:Was PEP8 betrifft, dem stehe ich kritisch gegenüber. Ich habe meinen eigenen "Stil" entwickelt der in fast allen Programmiersprachen und Scriptsprachen gleich ist - und das soll auch so bleiben ;)
Wenn du den Code nur für dich schreibst und kein anderer ihn so sehen bekommt, dann kannst du natürlich schreiben wie du möchtest. Es ist aber schon sinnvoll sich an die Vorschläge der Sprache zu halten, da die Entwickler sich natürlich dabei etwas gedacht haben. Besonders wenn du deinen Code präsentierst ist es natürlich sinnvoll sich an einen Styleguide zu halten. Damit hilfst du anderen deinen Code leichter zu verstehen.
Das Leben ist wie ein Tennisball.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Chrisber hat geschrieben:Was PEP8 betrifft, dem stehe ich kritisch gegenüber. Ich habe meinen eigenen "Stil" entwickelt der in fast allen Programmiersprachen und Scriptsprachen gleich ist - und das soll auch so bleiben ;)
Sprich dein Stil irritiert die Programmierer anderer Sprachen gleichermaßen weil du dich auch da nicht an Konventionen hälst? Also ich sehe da nix gutes daran.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

@Chrisber: Es kommt halt allgemein nicht gut an, wenn man auf dem eigenen Stil beharrt, obwohl man Quelltext für andere Programmierer schreibt ;)
Antworten