Ausgabe in Spalten wie beim Befehl "ls"
Verfasst: Samstag 21. November 2009, 15:58
Ich will die Elemente eines iterierbaren Objekts spaltenweise ausgeben. So eine Art Mischung aus [mod]pprint[/mod] und dem Unix-Tool `ls` also.
Im Prinzip klappt das schon ganz gut. Ich ermittle das längste Element und wende anschließend `str.lstrip()` an, um den gleichen Abstand für alle Elemente zu bekommen.
Jetzt würde ich aber gerne, so wie bei `ls`, Spalten von unterschiedlicher Breite haben, d.h. wenn relativ kurze Zeichenketten in einer Spalte landen, dann reichen natürlich entsprechend kleinere Werte für die Breite dieser Spalte aus.
Mein Problem ist, dass ich vorher nicht weiß, wieviele Spalten am Ende bei der Ausgabe herauskommen, so dass ich leider auch keinem Element seine Spalte zuordnen könnte. Denn 1-2 schmale Spalten können ja durchaus dazu führen, dass eine Spalte zusätzlich entstehen kann und dementsprechend alle Elemente umverteilt werden müssen.
Bei meiner jetzigen Version mit fester Spaltenbreite sage ich einfach `Max. an Zeichen für eine Zeile / (Zeichen des längsten Elements + gewünschter Mindestabstand)`.
Damit habe ich eine feste Anzahl an Elementen, die ich gruppenweise herausnehme und später mit einem Zeilenumbruch von den anderen Gruppen getrennt ausgebe. Die Schleife bricht ab, sobald keine neue Zeile mehr zustande kommt.
Hat jemand einen Ansatzpunkt für mich, wie man das am Besten für Spalten in variabler Anzahl und mit variabler Breite umsetzen kann? Zur Veranschaulichung hier mein Code: http://paste.pocoo.org/show/152070/
Im Prinzip klappt das schon ganz gut. Ich ermittle das längste Element und wende anschließend `str.lstrip()` an, um den gleichen Abstand für alle Elemente zu bekommen.
Jetzt würde ich aber gerne, so wie bei `ls`, Spalten von unterschiedlicher Breite haben, d.h. wenn relativ kurze Zeichenketten in einer Spalte landen, dann reichen natürlich entsprechend kleinere Werte für die Breite dieser Spalte aus.
Mein Problem ist, dass ich vorher nicht weiß, wieviele Spalten am Ende bei der Ausgabe herauskommen, so dass ich leider auch keinem Element seine Spalte zuordnen könnte. Denn 1-2 schmale Spalten können ja durchaus dazu führen, dass eine Spalte zusätzlich entstehen kann und dementsprechend alle Elemente umverteilt werden müssen.
Bei meiner jetzigen Version mit fester Spaltenbreite sage ich einfach `Max. an Zeichen für eine Zeile / (Zeichen des längsten Elements + gewünschter Mindestabstand)`.
Damit habe ich eine feste Anzahl an Elementen, die ich gruppenweise herausnehme und später mit einem Zeilenumbruch von den anderen Gruppen getrennt ausgebe. Die Schleife bricht ab, sobald keine neue Zeile mehr zustande kommt.
Hat jemand einen Ansatzpunkt für mich, wie man das am Besten für Spalten in variabler Anzahl und mit variabler Breite umsetzen kann? Zur Veranschaulichung hier mein Code: http://paste.pocoo.org/show/152070/