Seite 1 von 1
Tabellen Formatierung
Verfasst: Donnerstag 27. Januar 2005, 16:08
von Gast
Hallo,
ich bin relativ neu in Python.
Ich versuche gerade Ergebnisse in einer Art Tabelle zusammenfassend in ein File zu schreiben.
Also die Tabelle sollte 6 Spalten haben.
Etwa so:
Status Parameter Value1 Value2 line1 line2
Mein Problem ist dass Formatierungszeichen wie "%10s" % parameter
leider zu verschobenen einträgen führen da ja die Parameter und die Werte unterschiedlich lang sind...
Kann mir jemand helfen wie ich das einfachheit halber realisieren kann? Ich wünschte es ginge so dass exakt unter dem Buchstaben P von Parameter die ganzen Parameter Namen anfangen...und auch unter V von Value1 die Werte dann anfangen..
Danke euch
Verfasst: Donnerstag 27. Januar 2005, 16:46
von Leonidas
Du kannst dir ja Funktionen schreiben, die die einzelnen Strings "ausdehnen", indem sie Whitespaces einfügen. Das wäre eine Möglichkeit. Eine andere wäre die Nutzung von Tabs.
Verfasst: Donnerstag 27. Januar 2005, 16:47
von XT@ngel
Spontan fällt mir ein, den längsten wert einer Spalte suchen, und die anderen werte dieser Spalte mit hilfe von string.rjust() auf diese Länge mit Leerzeichen erweitern.
MfG
Andreas
Verfasst: Donnerstag 27. Januar 2005, 17:01
von XT@ngel
hier mal eine fünf Minuten Lösung:
Code: Alles auswählen
Spalte_1 = ["Status", "843854054950", "3473439438"]
def Find_maxLaenge(Spalte):
max_laenge = 0
for Wert in Spalte:
laenge = len(Wert)
if laenge > max_laenge:
max_laenge = laenge
return max_laenge
just = Find_maxLaenge(Spalte_1)
for Value in Spalte_1:
print Value.ljust(just) + "|"
mfG
Andreas
Verfasst: Donnerstag 27. Januar 2005, 17:02
von Dookie
Hi,
wohl eher str.ljust(n)
Du kannst aber auch bei der Stringformatierung mit % einfach einen Negativen Wert nehmen, dann wird der String linksbündig ausgegeben
Code: Alles auswählen
text1 = "Hallo"
text2 = "Welt"
fmt = "%-20s%-20s[ENDE]"
print fmt % (text1, text2)
Gruß
Dookie
Verfasst: Donnerstag 27. Januar 2005, 17:35
von BlackJack
Finden der maximalen Länge etwas kürzer:
Code: Alles auswählen
def find_max_length(iterable):
return reduce(max, map(len, iterable), 0)
Verfasst: Donnerstag 27. Januar 2005, 18:20
von Dookie
oder mit LC statt map:
Code: Alles auswählen
def find_max(iteralble):
return max([len(x) for x in iterable])
keine Chance für den max sich noch zu verstecken
@BlackJack: das reduce brauchts ned, max sucht aus einer beliebigen Reihe das Maximum raus, nicht nur aus einem Paar.
Gruß
Dookie
Verfasst: Freitag 28. Januar 2005, 20:19
von Gast
Ja Öha...
ein mal wech und dann schon so viel Hilfe....Danke euch allen. Werd mich gleich mal ransetzen und schauen das ichs hinformatier ;o)
Danke
Verfasst: Montag 31. Januar 2005, 13:12
von BlackJack
Dookie hat geschrieben:@BlackJack: das reduce brauchts ned, max sucht aus einer beliebigen Reihe das Maximum raus, nicht nur aus einem Paar.
Fast beliebige Sequenz -- diese hier funktioniert nicht: []. Bei dem reduce() hatte ich als Anfangswert deshalb eine 0 angegeben.
Verfasst: Montag 31. Januar 2005, 13:35
von Dookie
[] hat aber auch kein Maximum, auch nicht 0. Ausserdem wird bei reduce für jedes Element der Liste max aufgerufen während ohne reduce das ganze innerhalb der max-Funktion läuft. Was sicher um einiges performanter ist.
Ich würd halt vor dem Aufruf von find_max testen ob iterable leer ist oder das ganze in einen try: ... except ValueError: ... Block einschließen.
Gruß
Dookie