Jaka jest różnica między ogórkiem kiszonym a półką?
Po raz pierwszy uczę się serializacji obiektów. Próbowałem czytać i "googlować" różnice w modułach, ale nie jestem pewien, czy to Rozumiem. Kiedy użyć którego? Pickle może przekształcić każdy obiekt Pythona w strumień bajtów, który może zostać zapisany w pliku. Więc po co nam półka na moduły? Czy ogórki nie są szybsze?
1 answers
pickle
służy do serializacji niektórych obiektów (lub obiektów) jako pojedynczego bajtowego strumienia w pliku.
shelve
bazuje na pickle
i implementuje słownik serializacji, w którym obiekty są marynowane, ale powiązane z kluczem( jakimś ciągiem znaków), dzięki czemu możesz załadować swój plik z danymi i uzyskać dostęp do marynowanych obiektów za pomocą kluczy. Może to być wygodniejsze, jeśli chcesz serializować wiele obiektów.
Oto przykład użycia między tymi dwoma. (powinno działać w najnowszych wersjach Pythona 2.7 i Python 3.x).
pickle
przykład
import pickle
integers = [1, 2, 3, 4, 5]
with open('pickle-example.p', 'wb') as pfile:
pickle.dump(integers, pfile)
Spowoduje to zrzut listy integers
do pliku binarnego o nazwie pickle-example.p
.
A teraz spróbuj odczytać marynowany Plik z powrotem.
import pickle
with open('pickle-example.p', 'rb') as pfile:
integers = pickle.load(pfile)
print integers
Powyższe powinno wyjść [1, 2, 3, 4, 5]
.
shelve
przykład
import shelve
integers = [1, 2, 3, 4, 5]
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'c')) as shelf:
with shelve.open('shelf-example', 'c') as shelf:
shelf['ints'] = integers
Zauważ, jak dodajesz obiekty do półki poprzez dostęp podobny do słownika.
Odczytaj obiekt z powrotem z kodem w następujący sposób:
import shelve
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'r')) as shelf:
with shelve.open('shelf-example', 'r') as shelf:
for key in shelf.keys():
print(repr(key), repr(shelf[key])))
Wyjście będzie 'ints', [1, 2, 3, 4, 5]
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 23:14:05