Hallo Leute,
stehe gerade etwas auf dem Schlauch beim speichern einer Deque in eine Datei. :K
Pickle funktioniert offenbar bei einer Deque nicht.
Den Umweg, die Deque in eine normale Liste einzulesen und dann abzuspeichern(Pickle, Text-Datei...) wollte ich eigentlich vermeiden.
Die Deque direkt in ein Textfile zu speichern, geht natürlich. Nur dann gibts natürlich Probleme beim wiedereinlesen!
Inhalt der Deque: Stringobjekt. Aufbau: "Frage|Antwort" (Für eine Lernkartei)
Weiß jemand zufällig eine andere Lösung ? (Nein, bitte keine Datenbank..... schon ausprobiert........)
Beim "gurgeln" leider nix verwertbares im Web gefunden......
Nur einige diffuse Hinweise, daß Pickle bis auf wenige Ausnahmen auf alle Python-Objekte anwendbar ist.....
Die Deque wäre das ideale Datenmodell/Datencontainer für meine Lernkartei, deshalb wäre mir am direkten abspeichern der selben in eine Datei sehr gelegen.
Der Umweg über einen anderen Datencontainer zum Speichern würde das ganze ja nicht unbedingt beschleunigen.......
Grüße
CamelCase der genervte.....
Speichern einer Deque in eine Datei
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Huch... wie kommst Du denn da drauf?CamelCase hat geschrieben: Pickle funktioniert offenbar bei einer Deque nicht.
Code: Alles auswählen
In [10]: import pickle
In [11]: from collections import deque
In [12]: d = deque((1,2,3))
In [13]: s = pickle.dumps(d)
In [14]: pickle.loads(s)
Out[14]: deque([1, 2, 3])
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 6
- Registriert: Donnerstag 17. November 2011, 08:16
- Wohnort: 66333 Völklignen
weil DAS nicht funktioniert:Hyperion hat geschrieben:Huch... wie kommst Du denn da drauf?CamelCase hat geschrieben: Pickle funktioniert offenbar bei einer Deque nicht.Code: Alles auswählen
In [10]: import pickle In [11]: from collections import deque In [12]: d = deque((1,2,3)) In [13]: s = pickle.dumps(d) In [14]: pickle.loads(s) Out[14]: deque([1, 2, 3])
Code: Alles auswählen
import pickle
import collections
F1=collections.deque("")
#erweitern
F1.append("Messer|Costello")
F1.append("Eis|Gelati")
F1.append("Schwein|Porci")
# speichern
datei=open("fach1.krt","wb")
pickle.dump(F1,datei)
datei.close
PS: mit pickle.dumps funktionierts auch nich.....
Gibt Dir das Leben ne Zitrone, mach Limonade draus !!
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Du solltest `datei.close` auch aufrufen, oder besser noch
benutzen.
Code: Alles auswählen
with open('fach1.krt', 'wb') as datei:
pickle.dump(F1, datei)
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 6
- Registriert: Donnerstag 17. November 2011, 08:16
- Wohnort: 66333 Völklignen
Super, das passt !!cofi hat geschrieben:Du solltest `datei.close` auch aufrufen, oder besser nochbenutzen.Code: Alles auswählen
with open('fach1.krt', 'wb') as datei: pickle.dump(F1, datei)
Code: Alles auswählen
import pickle
import collections
F1=collections.deque("")
#erweitern
F1.append("Messer|Coltello")
F1.append("Eis|Gelati")
F1.append("Schwein|Porco")
F1.append("Wildschwein|Singularis Porcus")
F1.append("Postbote|Il Postino")
F1.append("Finanzamt|Mafia")
with open('fach1.krt', 'wb') as datei:
pickle.dump(F1, datei)
#deque leeren
F1.clear
# testweise wieder einlesen
datei=open("fach1.krt","rb")
F1=pickle.load(datei)
datei.close
# Testen ob Deque funktioniert
F1.rotate(-1)
print(F1)
# passt.......
wirklich noch etwas schleierhaft...... Vielleicht komm ich ja noch drauf.........
Villemols Merci auch! Hilft mir sehr weiter !
Grüßle
CamelCase
Gibt Dir das Leben ne Zitrone, mach Limonade draus !!
@CamelCase: Wurde doch bereits gesagt: Du must `close` *aufrufen* und nicht einfach nur referenzieren.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Gleiches gilt auch fuer `F1.clear`, das sollte `F1.clear()` heissen.
Warum du beim wiedereinlesen dann wieder kein `with` benutzt ist mir schleierhaft ..
Warum du beim wiedereinlesen dann wieder kein `with` benutzt ist mir schleierhaft ..
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 6
- Registriert: Donnerstag 17. November 2011, 08:16
- Wohnort: 66333 Völklignen
DEN Schreibfehler hab ich jetzt auch bemerkt............BlackJack hat geschrieben:@CamelCase: Wurde doch bereits gesagt: Du must `close` *aufrufen* und nicht einfach nur referenzieren.
Pyscripter motzt doch sonst bei jedem kleinen Fehlerchen rum.......
Gibt Dir das Leben ne Zitrone, mach Limonade draus !!
Das ist ja streng genommen auch kein Fehler, lediglich nutzlos.CamelCase hat geschrieben:Pyscripter motzt doch sonst bei jedem kleinen Fehlerchen rum.......
the more they change the more they stay the same
Wird zum Beispiel von pylint in der Regel auch erkannt als Anweisung ohne Effekt.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Vielleicht noch eine Anmerkung zu Deinem "Inhalt":
Wenn Du schon eine Lib zum Serialisieren von Datenstrukturen benutzt - im Falle von `pickle` sogar eine sehr mächtige -, dann solltest Du Dir evtl. mal überlegen, ob Du da wirklich etwas sinnvolles reinschreibst.
Im Endeffekt "missbrauchst" Du `pickle` hier als CSV mit einem "|" als Trenner
Offenbar hast Du da Wertpaare; diese kannst Du doch einfach in Tupeln verwalten:
Code: Alles auswählen
F1.append("Messer|Coltello")
F1.append("Eis|Gelati")
F1.append("Schwein|Porco")
F1.append("Wildschwein|Singularis Porcus")
F1.append("Postbote|Il Postino")
F1.append("Finanzamt|Mafia")
Im Endeffekt "missbrauchst" Du `pickle` hier als CSV mit einem "|" als Trenner
Offenbar hast Du da Wertpaare; diese kannst Du doch einfach in Tupeln verwalten:
Code: Alles auswählen
from collections import deque
words = deque()
words.append(("Messer", "Coltello"))
words.append(("Eis", "Gelatti"))
for pair in words:
german, italian = pair
print(german, italian)
"""
>>> Messer Coltello
>>> Eis Gelatti
"""
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Warum nicht gleich so (beim iterieren auspacken)?
Code: Alles auswählen
>>> for german, italian in words:
... print(german, italian)
...
Messer Coltello
Eis Gelatti
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Weil... ich es nie lernen werdederdon hat geschrieben:Warum nicht gleich so (beim iterieren auspacken)?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert