W Pythonie czasami musimy zapisać obiekt na dysku do późniejszego wykorzystania. Można to zrobić za pomocą marynaty w Pythonie. W tym artykule dowiemy się o piklach w Pythonie wraz z kilkoma przykładami.
Python Pickle — serializacja obiektów w języku Python
Pyton moduł marynowany służy do serializacji i deserializacji struktury obiektu Pythona. Dowolny obiekt w Pythonie można zamarynować w celu zapisania go na dysku. Pickle najpierw serializuje obiekt przed zapisaniem go do pliku. Wytrawianie to sposób na konwersję obiektu Pythona (listy, słownika itp.) na strumień znaków. Pomysł jest taki, że ten strumień znaków zawiera wszystkie informacje niezbędne do zrekonstruowania obiektu w innym Pyton scenariusz. Zapewnia możliwość konwersji dowolnego obiektu Pythona na strumień bajtów. Ten strumień Byte zawiera wszystkie niezbędne informacje o obiekcie, dzięki czemu można go zrekonstruować lub rozebrać i przywrócić do pierwotnej postaci w dowolnym języku Python.

Działanie serializacji
Przykład marynaty w Pythonie
Marynowanie bez pilnika
W tym przykładzie serializujemy dane słownika i przechowujemy je w strumieniu bajtów. Następnie dane te są deserializowane przy użyciu pikle.loads() funkcję z powrotem do oryginalnego obiektu Pythona.
Python3
algebra zbiorów
import> pickle> # initializing data to be stored in db> Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> 'age'> :>21>,>'pay'> :>40000>}> Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> 'age'> :>50>,>'pay'> :>50000>}> # database> db>=> {}> db[>'Omkar'>]>=> Omkar> db[>'Jagdish'>]>=> Jagdish> # For storing> # type(b) gives ;> b>=> pickle.dumps(db)> # For loading> myEntry>=> pickle.loads(b)> print>(myEntry)> |
>
Czyszczenie pamięci podręcznej npm
>
Wyjście:
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000}, 'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}> Marynowanie z pilnikiem
W tym przykładzie użyjemy pliku pickle, aby najpierw zapisać w nim dane za pomocą funkcji pickle.dump(). Następnie za pomocą funkcji pickle.load() załadujemy pickle fine w skrypcie Pythona i wydrukujemy jego dane w postaci słownika Pythona.
Python3
# Python3 program to illustrate store> # efficiently using pickle module> # Module translates an in-memory Python object> # into a serialized byte stream—a string of> # bytes that can be written to any file-like object.> import> pickle> def> storeData():> ># initializing data to be stored in db> >Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> >'age'> :>21>,>'pay'> :>40000>}> >Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> >'age'> :>50>,>'pay'> :>50000>}> ># database> >db>=> {}> >db[>'Omkar'>]>=> Omkar> >db[>'Jagdish'>]>=> Jagdish> > ># Its important to use binary mode> >dbfile>=> open>(>'examplePickle'>,>'ab'>)> > ># source, destination> >pickle.dump(db, dbfile)> >dbfile.close()> def> loadData():> ># for reading also binary mode is important> >dbfile>=> open>(>'examplePickle'>,>'rb'>)> >db>=> pickle.load(dbfile)> >for> keys>in> db:> >print>(keys,>'=>'>, db[keys])> >dbfile.close()> if> __name__>=>=> '__main__'>:> >storeData()> >loadData()> |
>
>
Wyjście:
Omkar =>{'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000} Jagdish => {'key ': 'Jagdish', 'imię': 'Jagdish Pathak', 'wiek': 50, 'zapłata': 50000}> Zalety używania Pickle w Pythonie
- Obiekty rekurencyjne (obiekty zawierające odniesienia do siebie): Pickle śledzi obiekty, które już serializował, więc późniejsze odniesienia do tego samego obiektu nie będą serializowane ponownie. (W tym celu moduł marszałka pęka.)
- Udostępnianie obiektów (odniesienia do tego samego obiektu w różnych miejscach): Jest to podobne do obiektów samoodnoszących się. Pickle przechowuje obiekt raz i upewnia się, że wszystkie inne odniesienia wskazują na kopię wzorcową. Obiekty współdzielone pozostają wspólne, co może być bardzo ważne w przypadku obiektów modyfikowalnych.
- Klasy zdefiniowane przez użytkownika i ich instancje: Marshal w ogóle ich nie obsługuje, ale Pickle może w przejrzysty sposób zapisywać i przywracać instancje klas. Definicja klasy musi nadawać się do importu i znajdować się w tym samym module, w którym obiekt był przechowywany.
Wady używania Pickle w Pythonie
- Zależność wersji Pythona: Dane picle są bardzo wrażliwe na wersję Pythona, która została wyprodukowana. Marynowany obiekt utworzony w jednej wersji Pythona, którego nie można rozmarynować w różnych wersjach.
- Nieczytelne: Format marynaty jest binarny i nie jest łatwy do odczytania ani edytowania przez ludzi. Umowy zapisane w formacie JSON lub XML można łatwo modyfikować.
- Duża nieefektywność danych: Duże zbiory danych mogą spowolnić trawienie i roztrawianie. Serializacja może być bardziej odpowiednia w takich przypadkach użycia.
Wniosek
Podczas gdy Python Pickle oferuje możliwości serializacji obiektów, programiści zachowują ograniczenia, szczególnie podczas pracy z różnymi wersjami Pythona lub pracy z dużymi zbiorami danych. Należy pamiętać, że zawsze należy wziąć pod uwagę specyficzne potrzeby aplikacji, aby określić, czy do serializacji nadaje się format XML, czy też alternatywny, taki jak JSON.
metoda podciąg Java