CodeGym /Kursy /Python SELF PL /Serializacja

Serializacja

Python SELF PL
Poziom 22 , Lekcja 0
Dostępny

8.1 Czym jest serializacja

Po tym, jak nauczyłeś się pracować z plikami, zapisywać i czytać dane, nadszedł czas, aby nauczyć się poważnie pracować z plikami. Dzisiaj zaczniemy uczyć się o serializacji.

Serializacja to proces przekształcania obiektu w sekwencję bajtów lub format, który można zapisać do pliku, przesłać przez sieć, lub zapisać w bazie danych. Deserializacja to proces odwrotny, który z tej sekwencji bajtów odtwarza oryginalny obiekt.

Aby zapisać obiekt w pliku (lub przesłać go przez sieć), trzeba przekształcić go w jakiś ciąg (lub zestaw bajtów), który będzie łatwo zapisać do pliku (i odczytać z pliku) lub przesłać przez sieć.

Oto 4 główne kierunki, w których używa się serializacji:

  • Zapisywanie stanu obiektów: aby zapisać stan obiektu między uruchomieniami programu.
  • Przesyłanie danych: aby przesyłać obiekty przez sieć między różnymi komponentami systemu lub między różnymi systemami.
  • Cache'owanie: aby zapisać obiekty w cache'u na szybki dostęp.
  • Bazy danych: aby przechowywać skomplikowane struktury danych w bazach danych.

Bibliotek zajmujących się serializacją jest bardzo dużo i każda stworzona na swoje potrzeby. Przyjrzymy się pięciu z nich, a z dwoma to znajomość będzie bardzo szczegółowa.

Przeanalizujemy najbardziej popularne z nich:

  • Moduł pickle
  • Moduł json
  • Moduł yaml
  • Moduł marshal
  • Moduł shelve

Niżej będzie krótki przegląd każdego z nich:

8.2 Moduł pickle

pickle to wbudowany moduł do serializacji i deserializacji obiektów Pythona. Pozwala zapisywać i odtwarzać prawie dowolne obiekty Pythona, w tym klasy użytkownika.

Przykład użycia pickle:


import pickle

# Przykład obiektu do serializacji
data = {'name': 'Alice', 'age': 30, 'is_student': False}
            
# Serializacja obiektu do pliku
with open('data.pkl', 'wb') as file:
    pickle.dump(data, file)
            
# Deserializacja obiektu z pliku
with open('data.pkl', 'rb') as file:
    loaded_data = pickle.load(file)
            
print(loaded_data)

8.3 Moduł json

json to wbudowany moduł do pracy z JSON (JavaScript Object Notation). JSON to tekstowy format, który jest używany do wymiany danych między klientem a serwerem.

Przykład użycia json:


import json

# Przykład obiektu do serializacji
data = {'name': 'Bob', 'age': 25, 'is_student': True}
            
# Serializacja obiektu do ciągu JSON
json_string = json.dumps(data)
print(json_string)
            
# Serializacja obiektu do pliku JSON
with open('data.json', 'w') as file:
    json.dump(data, file)
            
# Deserializacja obiektu z ciągu JSON
loaded_data = json.loads(json_string)
print(loaded_data)
            
# Deserializacja obiektu z pliku JSON
with open('data.json', 'r') as file:
    loaded_data = json.load(file)
print(loaded_data)

8.4 Moduł yaml

yaml (YAML Ain't Markup Language) to czytelny dla człowieka format serializacji danych. Do pracy z YAML w Pythonie używa się zewnętrznej biblioteki PyYAML.

Przykład użycia yaml:


import yaml

# Przykład obiektu do serializacji
data = {'name': 'Carol', 'age': 27, 'is_student': False}
            
# Serializacja obiektu do ciągu YAML
yaml_string = yaml.dump(data)
print(yaml_string)
            
# Serializacja obiektu do pliku YAML
with open('data.yaml', 'w') as file:
    yaml.dump(data, file)
            
# Deserializacja obiektu z ciągu YAML
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
            
# Deserializacja obiektu z pliku YAML
with open('data.yaml', 'r') as file:
    loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)

8.5 Moduł marshal

marshal to wbudowany moduł do serializacji obiektów Pythona, który jest używany do serializacji kodu Pythona. Jest szybszy niż pickle, ale obsługuje mniej typów obiektów i nie jest tak elastyczny.

Przykład użycia marshal:


import marshal

# Przykład obiektu do serializacji
data = {'name': 'Dave', 'age': 35, 'is_student': True}

# Serializacja obiektu do pliku
with open('data.marshal', 'wb') as file:
    marshal.dump(data, file)
            
# Deserializacja obiektu z pliku
with open('data.marshal', 'rb') as file:
    loaded_data = marshal.load(file)
            
print(loaded_data)

8.6 Moduł shelve

shelve to wbudowany moduł, który zapewnia prostą możliwość zapisywania obiektów Pythona do plików z użyciem magazynu opartego na kluczach, podobnego do słownika.

Przykład użycia shelve:


import shelve

# Przykład obiektu do serializacji
data = {'name': 'Eve', 'age': 28, 'is_student': False}
            
# Serializacja obiektu do pliku
with shelve.open('data.shelve') as db:
    db['person'] = data
            
# Deserializacja obiektu z pliku
with shelve.open('data.shelve') as db:
    loaded_data = db['person']
            
print(loaded_data)

I choć same moduły i format zapisu danych różnią się, praca z nimi z punktu widzenia programisty jest bardzo podobna. Poniżej bardziej szczegółowo omówimy pracę z modułem pickle i modułem json.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION