Anfängerfrage Variablenwerte in Datei schreiben

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
Thorsten
User
Beiträge: 9
Registriert: Freitag 9. Juni 2006, 06:37

Freitag 9. Juni 2006, 07:16

Hallo. Ich ermittle in einem Programm Werte und muss diese nun in eine Datei strukturiert speichern um die später wieder in ein anderes Programm auslesen zu können.

Nun habe ich das Problem, dass ich, wenn ich die Variable in die Datei schreiben will einen Fehler erhalte, dass das übergebene Argument nicht in einen String umgewandelt werden kann:

Code:

Code: Alles auswählen

def calculatePins(pinElements):
    c = gs.getComfortMethods()                                             #Komfortmethoden aufrufen
    totalPins = 0
    for element in pinElements:
        #print element
        pinElement = 0
        pin = c.getAllElementsByTypeFrom(element,"Pin")                    #alle Pins im aktuell gewählten Element suchen
        for pinanzahl in pin:                                              #jeder Pin wird einzeln addiert
            pinElement += 1                                                #für Ausgabe Pins von Element
            totalPins += 1                                                 #für Ausgabe der Gesamtpins
        #print anb
        print "Das Element ", element, "besitzt ", pinElement, " Pins"
        results.write(element)                                           #Element in Datei schreiben
        print pin
    results.close()
    return totalPins
Fehler:
TypeError: write(): 1st arg can't be coerced to String
Das Problem ist auch, dass write nur ein Objekt akzeptiert. Ich habe versucht sowas zu schreiben:

Code: Alles auswählen

 results.write(element, ';', pinElement, ';')
Aber da kam die Meldung, dass 1 Argument erwartet wird und es zu viele sind.

Also im Grunde habe ich erstmal die Frage: Wie kriege ich den Wert einer Variablen in eine Datei. Ob ich das ganze nicht doch als XML dann formatiere (soll im Moment noch in eine txt geschrieben werden) ist noch nicht fest.

Was ich in diese Datei schreiben muss sieht folgendermaßen aus:

element (Elementname) pinElement (Anzahl an Pins)
..... .....
..... .....

Gesamtpinzahl (text): gesamtzahl

Also ich möchte strukturiert die einzelnen Elementnamen + deren Pinzahl und am Ende die im Programm errechnete Gesamtzazhl ausgben. Im Moment soll das dann wieder in eine Excel-Datei importiert werden.

Dann noch eine andere Frage. Wenn ich folgendes schreibe:

Code: Alles auswählen

 print file('test.txt').read()
erhalte ich diese Fehlermeldung:
NameError: file
Anscheinend wird das file-Objekt nicht unterstützt. open und write führt jedoch zu keinem Fehler

Bin dankbar für Hilfe und Vorschläge.

Gruß
Thorsten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 9. Juni 2006, 07:57

Thorsten hat geschrieben:...und muss diese nun in eine Datei strukturiert speichern um die später wieder in ein anderes Programm auslesen zu können.
Hi Thorsten!

Hier habe ich zwei Links für dich, die dich evt. weiter bringen:
http://www.python-forum.de/topic-6157.html
http://docs.python.org/lib/module-csv.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Freitag 9. Juni 2006, 08:19

Falls du es als Textdatei machen willst:
Das Problem ist auch, dass write nur ein Objekt akzeptiert.
write nimmt nur einen String, du kannst mehrere Strings zusammenfuegen:

Code: Alles auswählen

datei.write("Hallo " + "Welt" + "!")

Code: Alles auswählen

results.write(element)
Du muss element in einen String umwandeln:

Code: Alles auswählen

results.write(str(element))
Ist element ein Objekt einer von dir selbst erzeugten Klasse, so solltest du die Funktion __str__ in der Klasse ueberschreiben, damit die Umwandlung das ergibt, was du willst, irgendwie sowas:

Code: Alles auswählen

self.__str(self)__:
    def return str(self.foo) + ": " + self.bar
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

Freitag 9. Juni 2006, 09:27

Hallo,

ich würde dir empfehlen, das ganze mit Pickle bzw. CPickle zu speichern. Damit kannst die ganze Listen/Dictionarys in eine Datei schreiben, ohne dich z.B. in die Umwandlung in XML und zurück kümmern zu müssen. (siehe hier

BeeWee
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Freitag 9. Juni 2006, 09:40

Thorsten hat geschrieben:ich würde dir empfehlen, das ganze mit Pickle bzw. CPickle zu speichern
beewee hat geschrieben:um die später wieder in ein anderes Programm auslesen zu können.
Dazu muss das andere Programm natuerlich auch picklen koennen.
Thorsten
User
Beiträge: 9
Registriert: Freitag 9. Juni 2006, 06:37

Freitag 9. Juni 2006, 10:18

Hallo danke für die Hilfe.
Ich habe es mittlerweile so gelöst bekommen:

Code: Alles auswählen

results.write('%s;%s;\n' % (element, pinElement))
.

Wobei der Hinweis, wie man mehrere Strings in eine Write Anweisung bekommt sehr hilfreich sein wird in Zukunft.

Jetzt bleibt noch die Frage wieso "file()" nicht funktioniert. Ich kann wie gesagt nur open(), write() read() benutzen. Bei file() bekomme ich einen Fehler.

Gruß und danke
Thorsten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 9. Juni 2006, 11:01

Thorsten hat geschrieben:Jetzt bleibt noch die Frage wieso "file()" nicht funktioniert. Ich kann wie gesagt nur open(), write() read() benutzen. Bei file() bekomme ich einen Fehler.
Hi Thorsten!

Hier http://www.python.org/doc/2.2/lib/built ... tml#l2h-18 steht:
The file() constructor is new in Python 2.2.

Vielleicht verwendest du eine ältere Python-Version.
Vielleicht überschreibst du "file" irgendwo. eine Suche nach "file =" in deinem Quellcode dürfte darüber Aufschluss geben.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Thorsten
User
Beiträge: 9
Registriert: Freitag 9. Juni 2006, 06:37

Freitag 9. Juni 2006, 13:35

Danke gerold.
Ich werde mal schauen welche Version von Python im Programm benutzt wird.

Gruß
Thorsten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 9. Juni 2006, 20:26

Thorsten hat geschrieben:Ich werde mal schauen welche Version von Python im Programm benutzt wird.
Hi Thorsten!

Code: Alles auswählen

import sys
sys.version
Sollte darüber Auskunft geben.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Thorsten
User
Beiträge: 9
Registriert: Freitag 9. Juni 2006, 06:37

Freitag 9. Juni 2006, 20:32

Super danke!!! Hier bekommt man schnelle und kompetente Hilfe. !!

Gruß
Thorsten
Antworten