Trwałość danych w Pythonie - serializacja obiektów
Wbudowany obiekt pliku Pythona zwracany przez wbudowaną funkcję open () języka Python ma jedną ważną wadę. Po otwarciu w trybie „w” metoda write () akceptuje tylko obiekt typu string.
Oznacza to, że jeśli masz dane reprezentowane w dowolnej postaci niebędącej ciągiem, obiekt albo wbudowanych klas (liczby, słownik, listy lub krotki) lub innych klas zdefiniowanych przez użytkownika, nie można ich zapisać bezpośrednio do pliku. Przed napisaniem musisz przekonwertować go na reprezentację ciągu.
numbers=[10,20,30,40]
file=open('numbers.txt','w')
file.write(str(numbers))
file.close()
W przypadku pliku binarnego argument do write()metoda musi być obiektem bajtowym. Na przykład lista liczb całkowitych jest konwertowana na bajty wedługbytearray() funkcji, a następnie zapisywane do pliku.
numbers=[10,20,30,40]
data=bytearray(numbers)
file.write(data)
file.close()
Aby odczytać dane z pliku w odpowiednim typie danych, należy wykonać odwrotną konwersję.
file=open('numbers.txt','rb')
data=file.read()
print (list(data))
Ten typ ręcznej konwersji obiektu na format ciągowy lub bajtowy (i odwrotnie) jest bardzo uciążliwy i żmudny. Możliwe jest przechowywanie stanu obiektu Pythona w postaci strumienia bajtów bezpośrednio do pliku lub strumienia pamięci i przywracanie do jego pierwotnego stanu. Ten proces nazywa się serializacją i deserializacją.
Wbudowana biblioteka Pythona zawiera różne moduły do serializacji i procesu deserializacji.
Sr.No. | Nazwa i opis |
---|---|
1 | pickle Biblioteka serializacji specyficzna dla języka Python |
2 | marshal Biblioteka używana wewnętrznie do serializacji |
3 | shelve Trwałość obiektów w Pythonie |
4 | dbm biblioteka oferująca interfejs do bazy danych Unix |
5 | csv biblioteka do przechowywania i pobierania danych Pythona do formatu CSV |
6 | json Biblioteka do serializacji do uniwersalnego formatu JSON |