|
Rozdział 6: Wejście i wyjście 1: Ładniejsze formatowanie wyjścia
- 2: Czytanie z i pisanie do plików - 3: Metody obiektów pliku
- 4: Moduł pickle
Lekcja 4: Moduł pickle
Napisy mogą być w łatwy sposób zapisywane i czytane z pliku. Liczby wymagają trochę więcej wysiłku, bowiem metoda read() zwraca tylko napis, który musi być poddany działaniu takiej funkcji, jak string.atoi(), która pobiera napis w rodzaju '123' i zwraca wartość liczbową 123. W przypadku jednak, gdy chce się przechowywać w pliku bardziej złożone typy danych jak listy, słowniki lub instancje klas, jest to bardziej skomplikowane.
Python dostarcza standardowy moduł pickle, który zaoszczędza użytkownikom pisania i śledzenia kodu służącego do zachowywania skomplikowanych typów danych. Ten zadziwiający moduł potrafi wziąć na wejściu prawie każdy obiekt Pythona (nawet pewne formy kodu!) i przekształcić go w napis. Proces ten zwie się marynowaniem (ang. pickling). Rekonstruowanie obiektu z formy napisowej zwie się odmarynowaniem (ang. unpickling). Pomiędzy marynowaniem a odmarynowaniem, napis reprezentujący obiekt może zostać zapisany w pliku lub w innej danej, lub przesłany połączeniem sieciowym do oddalonego komputera.
Jeżeli istnieje obiekt x i obiekt pliku f, który został otwarty do pisania, to najprostszy
sposób zamarynowania obiektu zajmuje jeden wiersz kodu:
pickle.dump(x, f)
Zakładając, że f jest obiektem pliku, który został otwarty do czytania, odmarynowanie przebiega następująco:
x = pickle.load(f)
(Istnieją warianty tego mechanizmu użyteczne w przypadku marynowania wielu obiektów, lub gdy nie chce się zapisać danych marynaty w pliku -- skonsultuj się z pełną dokumentacją dla modułu pickle).
pickle jest standardowym sposobem na uczynienie obiektów Pythona trwałymi i ponownie użytymi przez inne programy lub przyszłe wywołania tego samego programu: technicznym określeniem tego mechanizmu jest trwałość obiektu. Z powodu powszechnego użycia modułu pickle, wielu autorów piszących rozszerzenia do Pythona, dba o to, aby nowe typy danych, takie jak macierze, mogły być poprawnie zamarynowane i odmarynowane.
|
|