Seite 1 von 1

Pickle Problem

Verfasst: Dienstag 21. August 2007, 08:22
von Kuttengeier
Hallo Community,

ich habe mich, weil Leonidas es mir in einem anderen Beitrag geraten hat, mit Pickle auseindergesetzt, und gleich zu Beginn einen herben Rückschlag erlitten.

Ich möchte erstmal zum versuchen nur eine liste in eine Datei schreiben. das ganze sieht dann bei mir so aus.

Code: Alles auswählen

#!/usr/bin/python

import pickle

dict = [1, 2, 3, 4]
fp = file("save.bin", "w")
pickle.dump(dict, fp)
fp.close()
Beim ausführen des Codes bekomme ich diese Fehlermeldung:
Console hat geschrieben:AttributeError: ´module´ object has no attribute ´dump´
Zum V ergleich habe ich nochmal diesen Code abegspielt, der in diesem Forum hier gefunden habe: http://www.python-forum.de/topic-6157.html

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import pickle

# Schreiben
personen = [
    {"first name": "Gerold", "last name": "Penz", "age": "31"},
    {"first name": "Ludwig", "last name": "Bucher", "age": "29"},
]

f = file("dateiname.bin", "wb")
pickle.dump(personen, f)
f.close()

# Lesen
f = file("dateiname.bin", "rb")
personen = pickle.load(f)
f.close()
print personen
Selber Fehler!

Wo liegt mein Problem? Stimmt was mit dem Modul nicht?

Kuttengeier

Re: Pickle Problem

Verfasst: Dienstag 21. August 2007, 09:02
von CM
Kuttengeier hat geschrieben: Wo liegt mein Problem? Stimmt was mit dem Modul nicht?
Sieht in der Tat etwas seltsam aus. Der Code sollte eigentlich funktionieren. Es sei denn Du führst ein Skript names "pickle.py" mit dem gezeigten Inhalt aus und versuchst also dieses zu importieren. Dann kann man in der Tat diese Fehlermeldung provozieren. ;-)

Gruß,
Christian

PS Es ist außerdem keine so gute Idee Schlüsselwörter wie "dict" zu überschreiben.

Verfasst: Dienstag 21. August 2007, 10:33
von Leonidas
Wie CM geschrieben hat - du hast eine Datei ``pickle.py`` genannt, vermutlich die die du uns hier gepostet hast.

Übrigens sollte man pickle-Dateien mit 'wb' und 'rb' öffnen und sie mit ``HIGHEST_PROTOCOL`` abspeichern.

Verfasst: Dienstag 21. August 2007, 11:33
von Kuttengeier
OK, super, danke :)

Ich hab da gleich die nächste Frage. Und zwar:

Soll ich lieber so schreiben?

Code: Alles auswählen

p = pickle.Pickler(fp)
p.dump(liste)
oder besser so:

Code: Alles auswählen

pickle.dump(liste)
Was ist mehr "Pythonlike"?

Ich persönlich bevorzuge die obere Schreibweise, weils mehr OOP is, aber is natürlich nur ein persönliches feeling.

Kuttengeier

Verfasst: Dienstag 21. August 2007, 13:56
von Leonidas
Ich bevorzuge die untere Schreibweise, weil das
  1. nicht unnötigerweise OOP nutzt (OOP setzt man in Python dort ein wo es nötig ist, und nicht einfach so, wie in anderen Sprachen)
  2. es kürzer ist
  3. es eigentlich alle so nutzen

Verfasst: Dienstag 21. August 2007, 13:57
von CM
Hoi
Kuttengeier hat geschrieben:Was ist mehr "Pythonlike"?
weder noch. Darum geht es auch nicht. In den Docs wird beschrieben wann man wan einsetzen kann. Du mußt ggf. selber entscheiden, was für Dein Problem besser ist. Ich bevorzuge Lösung Nr. 2 für meine Probleme, aber das muß für Dich gar nichts heißen.

Leonidas hat im Übrigen nicht Unrecht mit seiner Bemerkung zu den Protokollen. Aber wenn Du Protokoll 0 nutzt, kannst Du natürlich auch mal in die Files reinschauen, was vielleicht ganz interessant sein kann am Anfang.

Gruß,
Christian

Verfasst: Dienstag 21. August 2007, 14:32
von birkenfeld
Und wen Pickle Format 0 interessiert, der kann sich diesen Blogartikel durchlesen: http://peadrop.com/blog/2007/06/18/pick ... -language/

Verfasst: Mittwoch 22. August 2007, 06:18
von Kuttengeier
ok, danke :)

Hab mich jetzt auch für die kürzere Schreibweise entschieden.

Kuttengeier

Verfasst: Mittwoch 22. August 2007, 08:36
von Leonidas
birkenfeld hat geschrieben:sich diesen Blogartikel durchlesen: http://peadrop.com/blog/2007/06/18/pick ... -language/
Wow, der Artikel ist super. Ich habe ihn jetzt nicht durchgearbeitet, aber ich habe Pickle noch nicht als Stacksprache angesehen :)

In den Kommentaren steht etwas von Pickle in Python 3.0, weißt du dazu irgendwelche Details?

Verfasst: Mittwoch 22. August 2007, 19:20
von birkenfeld
Nein, nichts genaues. Aber es wird wohl nur ein Modul geben, und das wird in C geschrieben sein.