Pickle

12.3 Pickle 

Problem: Da li ja u fajlu mogu samo da čuvam stringove, ili postoji i način da sačuvam bilo kakav objekat koji koristim u svom programu? Treba mi, želim da sačuvam na primer, listu sa najboljim rezultatima.
Rešenje: Jedno od mogućih rešenja je korišćenje Pythonovog standardnog modula koji se zove pickle. Pomoću njega možš da sačuvaš bilo kakav objekat u fajl i zatim, iz istog tog fajla ga učitati i koristiti kad zatreba. Ovo se drugačije naziva perzistentno čuvanje – tj čuvanje podataka za stalno.
Da krenemo na primer i da pokažemo kako se radi (i ovaj put, interaktivni prompt pokreni iz nekog „poznatog“ direktorijuma, slično kao što si uradio i u prošlom poglavlju kada sam ti objašnjavao fajlove).
>>> import pickle 
>>> čuvam_u = 'programdata.data' 
>>> najboljirezultati = [(150, 'Miloš'), (120, 'Jelena'), (110, 'Kozica Prasić'), (60, 'ja'), (30, 'ti')] 
>>> 
U ovom trenutku, jednostavno sam kreirao dve promenljive, jednu u kojoj čuvam ime fajla koji želim da koristim, i drugu u kojoj čuvam listu sačinjenu od tupli najboljih rezultata, na primer, u nekoj igri. Pre svega toga sam importovao modul pickle koji mi je potreban u radu.
Da bi memorisao neki objekat u nekom fajlu, prvo moram da "otvorim" taj fajl (da kreiram fajl objekt) pomoću funkcije open(), pri čemu moram voditi računa o njenim parametrima! Zbog specifičnosti objekata, i samog modula pickle, parametri su: 'b' – otvara fajl u binarnom režimu i 'w' -fajl otvoren za upisivanje:
>>> fajl = open(čuvam_u, 'wb') 
>>> 
Da bih u ovom fajlu sačuvao nešto moram pozvati funkciju dump() koja je deo pickle modula. Ovaj proces (čuvanje objekata u fajlu) se naziva pickling.
>>> pickle.dump(najboljirezultati, fajl) 
>>> fajl.close() 
>>> 
Brišemo najbolje rezultate da nam ne zauzimaju mesto u memoriji računara:
>>> del najboljirezultati 
>>> dir() 
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', 'fajl', 'pickle', 'čuvam_u'] 
>>> 
Učitavanje ide suprotno. Otvaramo fajl u 'rb' binarnom režimu za čitanje, a zatim, mi moramo „učitati“ objekat pomoću load() funkcije koja je deo pickle modula, a koja će da nam vrati naš objekat. Ovaj proces (čitanje iz fajla) se naziva unpickling:
>>> f = open(čuvam_u, 'rb') 
>>> top_rez = pickle.load(f) 
>>> for i in top_rez: 
...     a, b = i 
...     print('{} ima {} poena.'.format(b, a)) 
... 
Miloš ima 150 poena. 
Jelena ima 120 poena. 
Kozica Prasić ima 110 poena. 
ja ima 60 poena. 
ti ima 30 poena. 
>>> f.close() 
>>> 
Za prikaz rezultata koristio sam for petlju, a takđe i „otpakivanje“ tupli. Prouči dobro šta se desilo i kako se desilo, videćeš, nije teško.

12.2 Fajlovi Indeks 12.4 Unicode

Primjedbe

Popularno

Kako televizija štetno utiče na Vaše zdravlje finansije?

Da li je TV kviz Slagalica "prevara"?

Tu je novi Qt creator 4.4.0!

Kada prijatelji odlaze

Microsoft objavio - nova verzija Windowsa stiže...

Opet su se pojavili lažni kuponi brenda "IDEA" na društvenim mrežama

Najgore obrade velikih rock hitova

Sitnije promene na blogu...

Poslednji pozdrav izgubljenom vremenu

Ne, Marlboro ne deli besplatne cigarete!