Pickle Problem

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
Benutzeravatar
Kuttengeier
User
Beiträge: 27
Registriert: Freitag 17. August 2007, 07:04

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Kuttengeier
User
Beiträge: 27
Registriert: Freitag 17. August 2007, 07:04

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Und wen Pickle Format 0 interessiert, der kann sich diesen Blogartikel durchlesen: http://peadrop.com/blog/2007/06/18/pick ... -language/
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Kuttengeier
User
Beiträge: 27
Registriert: Freitag 17. August 2007, 07:04

ok, danke :)

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

Kuttengeier
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Nein, nichts genaues. Aber es wird wohl nur ein Modul geben, und das wird in C geschrieben sein.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten