Tabellen Formatierung

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
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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

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
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
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)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
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
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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

[] 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
[code]#!/usr/bin/env python
import this[/code]
Antworten