Seite 1 von 1

Liste aus Liste mit Strings --> formatieren

Verfasst: Dienstag 1. Juni 2010, 20:34
von acidk
Hallo Leute!

Ich hab gerade das Problem, dass ich eine Liste aus Listen mit strings habe :

Code: Alles auswählen

liste = [['44.217' , '-0.263' , '-9.987' , '1.00 ', '0.00'],
           ['44.281' ,  '0.957' ,'-10.766' , '1.00' , '0.00'], 
           ['45.747',   '1.312', '-10.816' , '1.00' , '0.00'],
           ['46.513'  , '0.990',  '-9.902',  '1.00' , '0.00']]
....und jeden Listeneintrag so formatiert in eine Datei schreiben möchte, dass alle Zahlen genau untereinander stehen:

Code: Alles auswählen

44.217  -0.263    -9.987  1.00  0.00           
44.281   0.957   -10.766  1.00  0.00           
45.747   1.312   -10.816  1.00  0.00           
46.513   0.990    -9.902  1.00  0.00
:K äääh ja ... ich habs über die Stringlänge gelöst und einen entsprechenden spacer drangehängt ... eher weniger elegant ich weiss :oops:
aber auch dass wird problematisch in spalte 2 , wenn negative Vorzeichen mit ins Spiel kommen .... Vorzeichentest und weiter basteln, oder gibts vielleicht wirklich eine vernünftige Lösung.

Vielen Dank an alle, die mir helfen,

flo

Re: Liste aus Liste mit Strings --> formatieren

Verfasst: Dienstag 1. Juni 2010, 21:01
von b.esser-wisser
Wenn's nur ums Ausssehen geht, geht sowas:

Code: Alles auswählen

for row in liste:
    print "{0: >10s}{1: >10s}{2: >10s}{3: >10s}{4: >10s}".format(*row)
(Du wirst sehen, dass in deiner Beispiel-list() ein Leerzeichen zuviel ist).
Wenn die Datei nur von Maschinen gelesen werden soll, sollte es '"\t".join(liste)' aber auch tun.

hth, Jörg

Re: Liste aus Liste mit Strings --> formatieren

Verfasst: Dienstag 1. Juni 2010, 22:30
von acidk
sorry -- ich kapiers nicht ganz --- was bewirkt der Ausdruck?
(wozu geschweifte Klammern, was macht >10s)?

bei:

Code: Alles auswählen

liste = [['44.217' , '-0.263' , '-9.987' , '1.00 ', '0.00'],
         ['44.281' ,  '0.957' ,'-10.766' , '1.00' , '0.00'], 
         ['45.747',   '1.312', '-10.816' , '1.00' , '0.00'],
         ['46.513'  , '0.990',  '-9.902',  '1.00' , '0.00']]
for row in liste:
    print "{0: >10s}{1: >10s}{2: >10s}{3: >10s}{4: >10s}".format(*row)
bekomme ich als Fehlermeldung:

Code: Alles auswählen

flo@AKB-34:~/Desktop/merger_new$ python test.py 
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    print "{0: >10s}{1: >10s}{2: >10s}{3: >10s}{4: >10s}".format(*row)
AttributeError: 'str' object has no attribute 'format'
was meinst Du mit '"\t".join(liste)' ??? :K

Danke, flo

Re: Liste aus Liste mit Strings --> formatieren

Verfasst: Dienstag 1. Juni 2010, 22:40
von /me
acidk hat geschrieben:

Code: Alles auswählen

flo@AKB-34:~/Desktop/merger_new$ python test.py 
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    print "{0: >10s}{1: >10s}{2: >10s}{3: >10s}{4: >10s}".format(*row)
AttributeError: 'str' object has no attribute 'format'
was meinst Du mit '"\t".join(liste)' ??? :K
Welche Python-Version setzt du ein? Wenn ein String-Objekt keine format-Methode hat, dann klingt das gar nicht so aktuell.

"\t".join(liste) wendet die jon-Methode auf den String "\t" (also das Tabulator-Zeichen) an. Solltest du join() nicht kennen, dann schau mal in die Dokumentation. Alternativ kannst du es auch einfach erst einmal ausprobieren.