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 ovog meseca

Gde pronaći novosti sa facebook stranica nakon velike promene koja ga je zadesila?

Dva načina da vratite svoj Windows 10 na fabričke vrednosti

Kako preuzeti video koji je neko postavio na facebook-u bez upotrebe dodatnih programa?

Više neće biti moguć besplatan prelazak na Windows 10

Prijateljski meč ŠK "Titel" - ŠK "Bukovac"

Tu je novi Qt creator 4.4.0!

Kako manipulisati Windows licencom pomoću slmgr komande?

Fake poet

Da li je poželjno biti anoniman na internetu (ili se predstavljati punim imenom i prezimenom)?

Organizacija foldera i fajlova u Linux fajl sistemu