Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1314:speichern_von_objekten_und_einiges_mehr

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1314:speichern_von_objekten_und_einiges_mehr [2014/03/10 13:41]
stefanborn
ws1314:speichern_von_objekten_und_einiges_mehr [2019/05/16 13:56] (aktuell)
stefanborn
Zeile 1: Zeile 1:
 ====== Speichern von Objekten ====== ====== Speichern von Objekten ======
  
-Objekte (Zahlen, Strings, numpy-Arrays,​ Listen, Dictionaries,​ Objekte, die Instanzen von Klassen sind) lassen sich in Python ganz einfach '​einmachen'​ (englisch: to pickle) mit Hilfe des Pakets **pickle**. ​ Dabei wird jeweils ein Objekt in eine Datei geschrieben. Das Objekt darf so groß und komplex sein, wie es will (etwa ein Liste von Listen von Bilddaten). Man kann also im Prinzip alles, was man speichern will, in ein '​dictionary'​ packen und dieses dann '​picklen'​. ​  Diese Sortierarbeit übernimmt das Paket **shelve**, das mit Hilfe von '​pickle'​ eine einfache Datenbank aufbaut.  ​+Objekte (Zahlen, Strings, numpy-Arrays,​ Listen, Dictionaries,​ Objekte, die Instanzen von Klassen sind) lassen sich in Python ganz einfach '​einmachen'​ (englisch: to pickle) mit Hilfe des Pakets **pickle** ​(oder in Python 2 des schnelleren,​ aber äquivalenten Moduls **cPickle**).  Dabei wird jeweils ein Objekt in eine Datei geschrieben. Das Objekt darf so groß und komplex sein, wie es will (etwa ein Liste von Listen von Bilddaten). Man kann also im Prinzip alles, was man speichern will, in ein '​dictionary'​ packen und dieses dann '​picklen'​. ​  Diese Sortierarbeit übernimmt das Paket **shelve**, das mit Hilfe von '​pickle'​ eine einfache Datenbank aufbaut.  ​
  
 Das Speichern und laden mit '​pickle'​ geht so: Das Speichern und laden mit '​pickle'​ geht so:
Zeile 9: Zeile 9:
 # Definiere irgendwelche Objekte # Definiere irgendwelche Objekte
  
-objekt=...+objekt =...
  
 # Speichern: # Speichern:
  
-f=file('​dateiname.pickle','​wb'​) +f = file('​dateiname.pickle','​wb'​) 
-p=pickle.Pickler(f)+p = pickle.Pickler(f)
 p.dump(o) p.dump(o)
 f.close() f.close()
  
 # Laden: # Laden:
-f=file('​dateiname.pickle','​rb'​) +f = file('​dateiname.pickle','​rb'​) 
-p=pickle.Unpickler(f) +p = pickle.Unpickler(f) 
-o=p.load()+o = p.load()
 f.close() f.close()
 </​code>​ </​code>​
Zeile 32: Zeile 32:
 # Irgendwelche Objekte definieren # Irgendwelche Objekte definieren
  
-o1=... +o1 =... 
-o2=... +o2 =... 
-o3=...+o3 =...
  
 ### Speichern mit shelve ### Speichern mit shelve
  
-db=shelve.open('​dateiname'​) +db =shelve.open('​dateiname'​) 
-db['​Objekt1'​]=o1 +db['​Objekt1'​] = o1 
-db['​Objekt2'​]=o2 +db['​Objekt2'​] = o2 
-db['​Zusatz'​]=o3+db['​Zusatz'​] = o3
 db.close() db.close()
  
Zeile 48: Zeile 48:
 db.shelve.open('​dateiname'​) db.shelve.open('​dateiname'​)
  
-o1geladen=db['​Objekt1'​] +o1geladen = db['​Objekt1'​] 
-o2geladen=db['​Objekt2'​] +o2geladen = db['​Objekt2'​] 
-o3geladen=db['​Zusatz'​]+o3geladen = db['​Zusatz'​]
 </​code>​ </​code>​
  
Zeile 71: Zeile 71:
   
  def __init__(self,​sorte,​stuecke,​zutaten={}):​  def __init__(self,​sorte,​stuecke,​zutaten={}):​
- self.sorte=sorte + self.sorte = sorte 
- self.stuecke=stuecke + self.stuecke = stuecke 
- self.zutaten=zutaten+ self.zutaten = zutaten
  
  def __str__(self):​  def __str__(self):​
  '''​Anzeige-Format für Objekte der Klasse Kuchen'''​  '''​Anzeige-Format für Objekte der Klasse Kuchen'''​
- ausgabe=\+ ausgabe = \
  ("​--------------------\n"​\  ("​--------------------\n"​\
  +"​Sorte:​ {0:​s}\n"​+  +"​Sorte:​ {0:​s}\n"​+
Zeile 95: Zeile 95:
  print "Das war das letzte Stück!"​  print "Das war das letzte Stück!"​
  else:  else:
- "Es ist leider nichts mehr da"+ print("Es ist leider nichts mehr da")
   
   
Zeile 101: Zeile 101:
 e=kuchen('​Erdbeerkuchen',​ 10) e=kuchen('​Erdbeerkuchen',​ 10)
  
-print k+print(k)
 k.iss() k.iss()
 k.iss() k.iss()
-print k +print(k) 
-print e +print(e)
  
  
 ### Speichern mit pickle ### Speichern mit pickle
  
-f=file('​kuchen.pickle','​w'​) +f = file('​kuchen.pickle','​w'​) 
-p=pickle.Pickler(f)+p = pickle.Pickler(f)
 p.dump([k,​e]) p.dump([k,​e])
 f.close() f.close()
Zeile 118: Zeile 118:
  
 db=shelve.open('​kuchen'​) db=shelve.open('​kuchen'​)
-db['​kuchen1'​]=k +db['​kuchen1'​] = k 
-db['​kuchen2'​]=e +db['​kuchen2'​] = e 
-db['​kommentar'​]="​Es fehlen noch Kuchen für die Feier."​+db['​kommentar'​] = "Es fehlen noch Kuchen für die Feier."​
 db.close() db.close()
 </​code>​ </​code>​
Zeile 141: Zeile 141:
  def __str__(self):​  def __str__(self):​
  '''​Anzeige-Format für Objekte der Klasse Kuchen'''​  '''​Anzeige-Format für Objekte der Klasse Kuchen'''​
- ausgabe=\+ ausgabe =\
  ("​--------------------\n"​\  ("​--------------------\n"​\
  +"​Sorte:​ {0:​s}\n"​+  +"​Sorte:​ {0:​s}\n"​+
Zeile 154: Zeile 154:
   
  def __init__(self,​sorte,​stuecke,​zutaten={}):​  def __init__(self,​sorte,​stuecke,​zutaten={}):​
- self.sorte=sorte + self.sorte = sorte 
- self.stuecke=stuecke + self.stuecke = stuecke 
- self.zutaten=zutaten+ self.zutaten = zutaten
   
  def iss(self):  def iss(self):
  '''​Methode isst ein Stück'''​  '''​Methode isst ein Stück'''​
  if self.stuecke>​0:​  if self.stuecke>​0:​
- self.stuecke-=1 + self.stuecke- = 1 
- if self.stuecke==0:​ + if self.stuecke == 0: 
- print "Das war das letzte Stück!"​+ print ​("Das war das letzte Stück!"​
  else:  else:
- "Es ist leider nichts mehr da"+      ​print("Es ist leider nichts mehr da")
   
   
Zeile 174: Zeile 175:
  
  
-f=file('​kuchen.pickle','​rb'​) +f = file('​kuchen.pickle','​rb'​) 
-p=pickle.Unpickler(f) +p = pickle.Unpickler(f) 
-l=p.load()+l = p.load()
  
-print l +print(l) 
-print l[0] +print(l[0]) 
-print l[1]+print(l[1])
  
-print "​--------------------"​+print("​--------------------"​)
  
 ##### Laden mit shelve ##### Laden mit shelve
  
-print "​Shelve ... "+print("​Shelve ... ")
  
 db=shelve.open('​kuchen'​) db=shelve.open('​kuchen'​)
-print len(db), " Einträge"​ +print(len(db), " Einträge"​) 
-print db['​kuchen1'​]+print(db['​kuchen1'​])
 for key in db: for key in db:
- print key, ":\n ", db[key]+ print(key, ":\n ", db[key])
   
   
Zeile 208: Zeile 209:
  
 db=shelve.open('​kuchen'​) db=shelve.open('​kuchen'​)
-print len(db), " Einträge"​+print(len(db), " Einträge"​)
 for key in db: for key in db:
- print key, " :​\n",​db[key]+ print(key, " :​\n",​db[key])
 </​code>​ </​code>​
  
-Ich habe die beiden Progrämmchen in den Ordner "​Einführung"​ unseres virtuellen Systems kopiert. Man kann an den Beispielen noch etwas mehr lernen: 
  
-  ​* Wenn man im Python-Interpreter "print o" eingibt, so wird das Objekt o angezeigt, wenn es dafür eine Anzeigemethode gibt. Für Zahlen, Strings, Arrays, etc. sind diese vordefiniert. Wenn wir aber selber eine Klasse schreiben, so können wir mit der Methode <​nowiki>​ __str__(self)</​nowiki>​ einen Ausgabe-String definieren. ​+Man kann an den Beispielen noch etwas mehr lernen: 
 + 
 +  ​* Wenn man im Python-Interpreter "print(o)" eingibt, so wird das Objekt o angezeigt, wenn es dafür eine Anzeigemethode gibt. Für Zahlen, Strings, Arrays, etc. sind diese vordefiniert. Wenn wir aber selber eine Klasse schreiben, so können wir mit der Methode <​nowiki>​ __str__(self)</​nowiki>​ einen Ausgabe-String definieren. ​
   * Ist k ein Objekt der Klasse '​kuchen',​ so können wird help(k) uns die für k definierten Attribute und Methoden samt der Doc-Strings anzeigen.  ​   * Ist k ein Objekt der Klasse '​kuchen',​ so können wird help(k) uns die für k definierten Attribute und Methoden samt der Doc-Strings anzeigen.  ​
  
  
ws1314/speichern_von_objekten_und_einiges_mehr.1394455299.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)