W programowaniu, zwłaszcza w języku Python, często spotyka się pojęcia serializacji i deserializacji, zwane również piklowaniem i odpiklowaniem. Te techniki są kluczowe, gdy chcemy zapisywać stan obiektu do pliku, aby móc go później odtworzyć, lub przesyłać dane między różnymi programami lub instancjami programu. W tym artykule wyjaśnimy, czym są te procesy i jak są stosowane w Pythonie, z przykładami kodu i komentarzami po polsku.
Serializacja (Piklowanie)
Serializacja, znana w Pythonie jako “piklowanie”, to proces konwersji obiektu w Pythonie do formatu bajtowego, który można zapisać na dysku lub przesłać przez sieć. Operacja ta umożliwia zapis stanu obiektu do pliku, co jest szczególnie przydatne w przypadku przechowywania złożonych struktur danych, takich jak listy, słowniki, a nawet instancje klas.
Przykład piklowania
import pickle
# Definicja prostej struktury danych
data = {"klucz": "wartość", "liczba": 42}
# Piklowanie danych do pliku
with open("data.pickle", "wb") as file:
pickle.dump(data, file) # Zapisuje obiekt data do pliku w formacie pickle
W powyższym przykładzie, używamy modułu pickle
do serializacji słownika data
i zapisujemy go do pliku data.pickle
. Użycie trybu "wb"
w funkcji open
oznacza, że plik jest otwierany do zapisu w trybie binarnym, co jest wymagane przez proces piklowania.
Deserializacja (Odpiklowanie)
Deserializacja, czyli odpiklowanie, to proces odwrotny do serializacji. Polega na przekształceniu danych z formatu bajtowego z powrotem na obiekt Pythona. Dzięki temu możemy odtworzyć stan obiektu zapisanego wcześniej na dysku.
Przykład deserializacji
import pickle
# Odpiklowanie danych z pliku
with open("data.pickle", "rb") as file:
data_loaded = pickle.load(file) # Odczytuje obiekt z pliku i przypisuje do zmiennej data_loaded
# Wyświetlanie załadowanych danych
print(data_loaded) # Wyświetli: {'klucz': 'wartość', 'liczba': 42}
W tym fragmencie kodu, otwieramy plik data.pickle
w trybie "rb"
(czytanie w formacie binarnym) i używamy funkcji pickle.load
do odczytania i deserializacji danych z pliku, a następnie przypisujemy je do zmiennej data_loaded
.
Podsumowanie
Serializacja i deserializacja w Pythonie, znane jako piklowanie i odpiklowanie, są potężnymi narzędziami, umożliwiającymi zapis i odtwarzanie stanu obiektów. Dzięki tym procesom, możemy łatwo przechowywać złożone struktury danych lub przesyłać je między różnymi częściami aplikacji. Ważne jest jednak, aby pamiętać o potencjalnych zagrożeniach bezpieczeństwa związanych z odczytem niezaufanych danych piklowanych, gdyż deserializacja niebezpiecznych danych może prowadzić do ataków lub niechcianych efektów w programie.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Python w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.