Seite 1 von 1

Ausgabe in der Konsole als Tabelle formatieren

Verfasst: Freitag 21. August 2009, 18:47
von burli
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

Verfasst: Freitag 21. August 2009, 19:21
von EyDu
Du hast die Suchfunktion nicht benutzt, oder? ;-)

Verfasst: Freitag 21. August 2009, 19:26
von burli
wenn du mir sagst, welche Stichworte ich verwenden soll? Die Stichwörter, die mir so einfallen, haben nicht geholfen

Verfasst: Freitag 21. August 2009, 21:11
von burli
Ich hab mir jetzt mit Tabs geholfen. Schön ist das aber noch nicht.

Xmega Baudrate Calculator

Verfasst: Freitag 21. August 2009, 21:23
von EyDu
"tabelle konsole"
"tabelle ausgeben"

Verfasst: Samstag 22. August 2009, 01:15
von str1442
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.

Verfasst: Samstag 22. August 2009, 09:48
von burli
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.

Verfasst: Samstag 22. August 2009, 10:10
von HWK
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

Verfasst: Samstag 22. August 2009, 11:00
von burli
HWK hat geschrieben:In Dicts ist die Reihenfolge nicht garantiert.
Stimmt. Naja, ich lass es erstmal so. Danke für die Tipps.

Verfasst: Samstag 22. August 2009, 12:32
von sma

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

Verfasst: Samstag 22. August 2009, 13:23
von derdon
Es gibt das Paket texttable im pypi.

Verfasst: Samstag 22. August 2009, 14:02
von lunar
Allerdings nur für GPL-Programme …

Verfasst: Samstag 22. August 2009, 19:42
von theliquidwave
Vielleicht kannst es ja noch gebrauchen :)

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

~ Chris

Verfasst: Samstag 22. August 2009, 20:20
von burli
It's never too late :)

Aber ich schau mir mal texttable an, GPL hin oder her. Ist eh nur ein kleines Tool

Verfasst: Samstag 22. August 2009, 20:49
von EyDu
@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.

Verfasst: Samstag 22. August 2009, 22:10
von theliquidwave
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

Verfasst: Samstag 22. August 2009, 22:29
von EyDu
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.

Verfasst: Sonntag 23. August 2009, 11:18
von Leonidas
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.

Verfasst: Sonntag 23. August 2009, 11:58
von lunar
@Chrisber: Es kommt halt allgemein nicht gut an, wenn man auf dem eigenen Stil beharrt, obwohl man Quelltext für andere Programmierer schreibt ;)