Seite 1 von 1

Anfängerfrage Variablenwerte in Datei schreiben

Verfasst: Freitag 9. Juni 2006, 07:16
von Thorsten
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

Re: Anfängerfrage Variablenwerte in Datei schreiben

Verfasst: Freitag 9. Juni 2006, 07:57
von gerold
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
:-)

Verfasst: Freitag 9. Juni 2006, 08:19
von Rebecca
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

Verfasst: Freitag 9. Juni 2006, 09:27
von beewee
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

Verfasst: Freitag 9. Juni 2006, 09:40
von Rebecca
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.

Verfasst: Freitag 9. Juni 2006, 10:18
von Thorsten
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

Verfasst: Freitag 9. Juni 2006, 11:01
von gerold
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
:-)

Verfasst: Freitag 9. Juni 2006, 13:35
von Thorsten
Danke gerold.
Ich werde mal schauen welche Version von Python im Programm benutzt wird.

Gruß
Thorsten

Verfasst: Freitag 9. Juni 2006, 20:26
von gerold
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
:-)

Verfasst: Freitag 9. Juni 2006, 20:32
von Thorsten
Super danke!!! Hier bekommt man schnelle und kompetente Hilfe. !!

Gruß
Thorsten