snafu hat geschrieben: ↑Montag 15. Oktober 2018, 23:37
Habe mich nach zwei Jahren Pause nochmal an die Arbeit gemacht und zunächst den Unterbau komplett neu geschrieben. Er basiert jetzt auf Python 3 (wobei Python 2.7 mit wenigen Anpassungen möglich sein dürfte), nutzt das moderne String-Formatting, kann nun links- und rechtsbündig schreiben. Außerdem ist bestimmbar, ob die Anordnung vertikal oder horizontal sein soll. Was noch fehlt, ist die automatische Erkennung der benötigten Spalten für eine möglichst hohe Zeilenlänge. Da muss man die Spaltenzahl derzeit noch manuell eingeben, aber ich arbeite dran. Hat ja bei der Vorgängerversion auch funktioniert. Hier mein Zwischenstand:
https://gist.github.com/seblin/be07bb48 ... c05dcc4100
Die Funktion
columnize() nimmt alles aus dem Config-Dict auch direkt per Parameter an, also z.B.
Code: Alles auswählen
print(columnize(range(1, 31), num_columns=5, align='right', vertical=False, spacer=' | '))
Viel Spaß an alle Interessierten!
Meine Güte, da habe ich früher durchgeblickt?
OK, man wird älter. Ich finde aus jetziger Betrachtung den gezeigten Code schrecklich. Auch wenn ich an vielen Stellen in etwa weiß, was ich gemeint habe.
Seit einigen Wochen sitze ich mal wieder dran. Es gibt eine Cell()-Klasse, die Zeilenumbrüche für überlange Strings bei Bedarf macht. Konkret kann man z. B. Cell("foobar", 3) sagen und man hätte nach dem dritten Zeichen ("foo") einen Zeilenumbruch, sofern man beim Style ein linewrap=True mitgibt. Andernfalls ist das Standardverhalten nun das Einfügen von Auslassungspunkten ("fo…").
Die Ausgaben sind nun deutlich fehlerfreier und die Strukturierung ist IMHO deutlich besser gelungen (Cell -> Column -> Frame -> Display), wobei erst am dem Display die Zeilenlänge beachtet wird. Ich schreibe demnächst noch das Display zu Ende, damit verschiedene Datentypen unterstützt werden (anstatt os.listdir() jetzt natürlich Path()-Objekte).
Das Shrinking von überlangen Spalten ist IMHO mittlerweile auch ganz gut gelungen.
Aus Spacing als Zahl wurde übrigens ein Spacer, d. h. man gibt einfach den String an, den man als Trennzeichen haben möchte.
Das automatische Ermitteln der Breite des Terminals stellt heutzutage auf den meisten Plattformen auch kein Problem mehr dar. Dennoch kann die gewünschte Zeilenlänge auch manuell angegeben werden.