8.1 Serialization nədir
Fayllarla işləməyi, məlumatları yadda saxlamağı və oxumağı öyrəndikdən sonra, artıq fayllarla ciddi şəkildə işləməyi öyrənmək vaxtıdır. Bu gün biz serialization öyrənməyə başlayacağıq.
Serialization — obyektin bayt ardıcıllığına və ya faylda saxlamaq, şəbəkə vasitəsilə ötürmək və ya verilənlər bazasında saxlamaq mümkün olan formata çevrilməsi prosesidir. Deserialization — bu bayt ardıcıllığından ilkin obyektin bərpa edildiyi əks prosesdir.
Bir obyekti faylda saxlamaq (və ya şəbəkə vasitəsilə ötürmək) üçün onu müəyyən bir sətirə (və ya bayt toplusuna) çevirmək lazımdır. Belə ki, bu sətiri fayla yazmaq (və fayldan oxumaq) və ya şəbəkə vasitəsilə ötürmək asan olsun.
Serialization istifadə olunan əsas 4 istiqamət bunlardır:
- Obyektlərin vəziyyətinin saxlanması: Proqramın növbəti işə salınmaları arasında obyektin vəziyyətini saxlamaq üçün.
- Məlumatların ötürülməsi: Sistemin müxtəlif komponentləri arasında və ya müxtəlif sistemlər arasında obyektləri şəbəkə vasitəsilə ötürmək üçün.
- Caching: Obyektləri tez giriş üçün cache-də saxlamaq üçün.
- Verilənlər bazaları: Mürəkkəb məlumat strukturlarını verilənlər bazalarında saxlamaq üçün.
Serialization ilə məşğul olan kitabxanalar çoxdur və hər biri öz ehtiyacları üçün yaradılmışdır. Biz onların beşi ilə tanış olacağıq, ikisi ilə isə çox ətraflı tanış olacağıq.
Ən məşhur olanları nəzərdən keçirək:
pickle
modulujson
moduluyaml
modulumarshal
modulushelve
modulu
Aşağıda hər birinin qısa icmalı veriləcək:
8.2 pickle
modulu
pickle
— bu, Python obyektlərinin seriyalaşdırılması və deseriyalaşdırılması üçün daxili moduludur. Bu, Python-un istənilən obyektini, istifadəçi tərəfindən yaradılan siniflər də daxil olmaqla, saxlamağa və bərpa etməyə imkan verir.
pickle
-dan istifadə nümunəsi:
import pickle
# Seriyalaşdırmaq üçün obyekt nümunəsi
data = {'name': 'Alice', 'age': 30, 'is_student': False}
# Obyektin faylda seriyalaşdırılması
with open('data.pkl', 'wb') as file:
pickle.dump(data, file)
# Obyektin fayldan deseriyalaşdırılması
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)
print(loaded_data)
8.3 json
modulu
json
— bu, JSON (JavaScript Object Notation) ilə işləmək üçün daxili moduldur. JSON — bu, müştəri və server arasında məlumat mübadiləsində istifadə olunan mətn formatıdır.
json
-dan istifadə nümunəsi:
import json
# Serializasiya üçün obyekt nümunəsi
data = {'name': 'Bob', 'age': 25, 'is_student': True}
# Obyekti JSON formatlı sətirə serializasiya etmək
json_string = json.dumps(data)
print(json_string)
# Obyekti JSON faylına serializasiya etmək
with open('data.json', 'w') as file:
json.dump(data, file)
# JSON formatlı sətirdən obyekt deserializasiya etmək
loaded_data = json.loads(json_string)
print(loaded_data)
# JSON faylından obyekt deserializasiya etmək
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
8.4 yaml
modulu
yaml
(YAML Ain't Markup Language) — bu, məlumatların insan tərəfindən oxuna bilən serializasiya formatıdır. Python-da YAML ilə işləmək üçün PyYAML adlı üçüncü tərəfin kitabxanasından istifadə olunur.
yaml
istifadəsi üçün nümunə:
import yaml
# Serializasiya üçün obyekt nümunəsi
data = {'name': 'Carol', 'age': 27, 'is_student': False}
# Obyekti YAML sətirinə serializasiya etmək
yaml_string = yaml.dump(data)
print(yaml_string)
# Obyekti YAML faylına serializasiya etmək
with open('data.yaml', 'w') as file:
yaml.dump(data, file)
# YAML sətirindən obyekti deserializasiya etmək
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
# YAML faylından obyekti deserializasiya etmək
with open('data.yaml', 'r') as file:
loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)
8.5 Modul marshal
marshal
— bu Python obyektlərini seriyalaşdırmaq üçün daxili moduldur, və bu daha çox Python kodunu seriyalaşdırmaq üçün istifadə olunur. O, pickle
-dən daha sürətlidir, amma daha az obyekt növləri dəstəkləyir və çox da çevik deyil.
marshal
istifadə nümunəsi:
import marshal
# Seriyalaşdırmaq üçün obyekt nümunəsi
data = {'name': 'Dave', 'age': 35, 'is_student': True}
# Obyekti fayla seriyalaşdırmaq
with open('data.marshal', 'wb') as file:
marshal.dump(data, file)
# Obyekti fayldan deserializasiya etmək
with open('data.marshal', 'rb') as file:
loaded_data = marshal.load(file)
print(loaded_data)
8.6 Modul shelve
shelve
— bu daxili bir moduldu və Python obyektlərini fayllarda saxlamağa sadə bir üsul təqdim edir, açar əsaslı saxlama formatından istifadə edərək, bu da lüğətə bənzəyir.
shelve
-dən istifadə nümunəsi:
import shelve
# Seriyalaşdırmaq üçün obyekt nümunəsi
data = {'name': 'Eve', 'age': 28, 'is_student': False}
# Obyekti fayla seriyalaşdırmaq
with shelve.open('data.shelve') as db:
db['person'] = data
# Obyekti fayldan deserializasiya
with shelve.open('data.shelve') as db:
loaded_data = db['person']
print(loaded_data)
Modullar və məlumat saxlama formatları fərqli olsa da, proqramçı baxımından onlarla işləmək çox oxşardı. Aşağıda biz daha ətraflı pickle
modulu və json
modulu-nun işləməsini nəzərdən keçirəcəyik.
GO TO FULL VERSION