Mehrfachausgabe - woher?

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
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Hallo Community!
Ich habe das Problem, dass bei einer Ausgabe (in meinem Fall in das Textfeld 'out') die Daten sooft reingeschrieben werden, wie die Nummer der Zeile lautet. Z.B. habe ich die Werte 1, 2, 3 und 4, wobei 1 und 2 in der 1. und 3 und 4 in der 2. Zeile Stehen. Jetzt bekomme ich die Ausgabe (die "|" sind beabsichtigt):

Code: Alles auswählen

1         |10        |
2         |20        |2         |20        |
40        |80        |40        |80        |40        |80        |
Mein Code (nur ein Ausschnitt, der ganze wäre zu lang) lautet wie folgt:

Code: Alles auswählen

                fm = ''
                format_ = "content = fm.format("
                for line in data.split("<|>")[:-1]:
                    fields = line.split("|")[:-1]
                    for count in range(0, len(fields)):
                        fm += "{%d:<10}|"%(count)
                        field = fields[count]
                        try: int(field)
                        except: field = "'" + field + "'"
                        format_ += "%s,"%(str(field))

                    format_ = format_[:-1] + ")"
                    exec(format_)
                    format_ = "content = fm.format("
                    out.insert(END, content + "\n")
Eingabe ist ein String wie zum Beispiel "1|10|<|>2|20|<|>40|80|<|>". Ich splitte alles auf und bekomme die einzelnen Zellen zurück, die ich in einem String formatiere und dann in das Textfeld einfüge.

Meine Fragen lauten:
Gibt es jemanden, der die Mehrfachausgabe erkennt und wenn ja, wo ist diese Stelle in meinem Code?

Ich hoffe, ihr könnt mir helfen und bedanke mich schonmal im Vorraus,
Dark Shadow
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Willst Du uns nicht lieber beschreiben, was Du erreichen willst? Ich habe zwar auch noch nicht wirklich verstanden, was schief läuft, aber null Ahnung von dem, was Du erreichen willst!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Ich dachte, dass hätte ich reingeschrieben. :oops:
Ich möchte die Werte als Tabelle in mein Text-Widget einfügen. Dafür verwende ich den String-format-Befehl. Allerdings liefert er zu viele Werte/werden zu viele Werte in mein Text-Widget eingefügt.
BlackJack

@Dark Shadow: Dann würde ich sagen schmeiss den Code weg, und schreib den in Python und nicht Python das Python-Quelltext erzeugt der dann ausgeführt wird um das Ergebnis zu produzieren — oder halt auch nicht. Umständlicher geht es doch kaum. Vergiss am besten dass es ``exec`` überhaupt gibt.

Edit: Kann es sein dass Du einfach so etwas hier suchst!?

Code: Alles auswählen

data = '1|10|<|>2|20|<|>40|80|<|>'

for line in data.split('<|>')[:-1]:
    print ''.join('%-10s|' % field for field in line.split('|')[:-1])
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

Ja, so sieht's aus. :mrgreen:

Danke für Deine Lösung, BlackJack. Einfacher geht es wahrscheinlich nicht mehr.

Danke euch beiden für eure schnelle Hilfe!
Dark Shadow
Antworten