Seite 1 von 1

Programm speichern/laden

Verfasst: Donnerstag 19. Januar 2006, 08:05
von Alpha-Phonix
Hallo an alle!

ich habe ein kleines Programm, dass mit raw_input verschiedene Zahlen eines Benutzers einliest.
in einer funktion kann ich mir alles eingegeben daten nochmal anschauen, sowei so gut!
jetzt möchte ich, dass diese zahlen in einer txt datein gespeichert werden und auch wieder geladen werden können!
habt ihr eine idee, wie sowas funktionieren könnte?

Vielen Dank!

Verfasst: Donnerstag 19. Januar 2006, 08:13
von mawe
Hi!

Naja, zuerst mal öffnest Du eine Datei

Code: Alles auswählen

f = file("dateiname.txt", "w")
Das "w" steht für write. Dann schreibst Du was rein

Code: Alles auswählen

f.write(was_auch_immer)
Zum lesen, Datei öffnen ("r" = read)

Code: Alles auswählen

f = file("dateiname.txt", "r")
und lesen

Code: Alles auswählen

xyz = f.read()
Gruß, mawe

Verfasst: Donnerstag 19. Januar 2006, 08:35
von Alpha-Phonix
dankeschön vom prinzip her funktionierts!
nur er zeigt mir bei float werden (meine vermutun) diesen fehler an:

Traceback (most recent call last):
File "menu.py", line 206, in ?
f.write(schnittlaenge_kreis)
TypeError: argument 1 must be string or read-only character buffer, not float

Verfasst: Donnerstag 19. Januar 2006, 08:44
von mawe
Einfach in einen String umwandeln

Code: Alles auswählen

f.write(str(schnittlaenge_kreis))

Verfasst: Donnerstag 19. Januar 2006, 08:54
von pr0stAta
und am ende deiner funktion solltest du die datei in welche du schreibst
auch schließen.

Code: Alles auswählen

f.close()

Verfasst: Donnerstag 19. Januar 2006, 09:25
von jens
Oder den ini-Parser nehmen, wenn es mehr Daten werden... Oder gleich pickle nehmen, hat den Vorteil, das man ganze Datensätzte leicht abspeichern und laden kann, allerdings ist die Textdatei nicht mehr wirklich per Hand bearbeitbar...

Verfasst: Donnerstag 19. Januar 2006, 09:41
von Alpha-Phonix
alles klar vielen dank hat perfekt geklappt!

ein schönheitsfehler hab ich noch, die txt schreibt dann alles hintereinander, wie kann ich es erreichen eine newline zu setzen?

Verfasst: Donnerstag 19. Januar 2006, 09:43
von mr.hide
Alpha-Phonix hat geschrieben:alles klar vielen dank hat perfekt geklappt!

ein schönheitsfehler hab ich noch, die txt schreibt dann alles hintereinander, wie kann ich es erreichen eine newline zu setzen?

Code: Alles auswählen

f.write(zuschreibenderstring + "\n")

Verfasst: Donnerstag 19. Januar 2006, 10:02
von Alpha-Phonix
da kommt dann...

Traceback (most recent call last):
File "menu.py", line 210, in ?
f.write(str(schnittlaenge_kreis + "\n"))
TypeError: unsupported operand type(s) for +: 'float' and 'str'

Verfasst: Donnerstag 19. Januar 2006, 10:11
von mawe
mr.hide hat ja auch geschrieben "zuschreibenderstring", das soll also schon ein string sein. Also, entweder

Code: Alles auswählen

f.write(str(schnittlaenge_kreis) + "\n")
oder

Code: Alles auswählen

f.write("%s\n" % schnittlaenge_kreis)
Bei der zweiten Methode kann am wenigsten schief gehen, weil %s alles in einen String umwandelt.

Verfasst: Donnerstag 19. Januar 2006, 10:42
von mr.hide
Alpha-Phonix hat geschrieben:da kommt dann...

Traceback (most recent call last):
File "menu.py", line 210, in ?
f.write(str(schnittlaenge_kreis + "\n"))
TypeError: unsupported operand type(s) for +: 'float' and 'str'
Generell solltest du dir angewöhnen die Fehlermeldungen zu lesen.

- TypeError: es stimmt etwas nicht mit den verwendeten Datentypen.
- unsupported operand type(s): operand, damit ist das + gemeint.
ja und unsupported types, kann dann nur noch heissen dass man str und float nicht addieren kann :wink:

also hast du 2 möglichkeiten aus dem str ein float zu machen was recht sinnfrei ist oder aus dem float ein str.

Verfasst: Donnerstag 19. Januar 2006, 11:06
von Alpha-Phonix
vielen dank, dass mit dem speichern funktioniert jetzt einwandfrei!

nun zum laden, ich habe wie oben beschrieben programmiert, jedoch (wäre hätte es gedacht) klappt es nicht so, wie ich des will...

ich habe jetzt ein txt datei und will die werte die da drin stehn, in meinem prog wieder benutzen, dass heißt:

wenn in der txt steht

Radius: 5cm

dann will ich nach dem laden, wieder mit dem wert arbeiten können, da sagt er mir immer radius is not defiend....
wie muss ich des machen??

Verfasst: Donnerstag 19. Januar 2006, 11:25
von jens
Dazu passt der eine ini Datei besser! Schau mal hier: http://www.python-forum.de/viewtopic.php?p=27731#27731