Liste aus Liste mit Strings --> formatieren

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
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

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
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

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
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Antworten