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?

Author: zubinmehta, 2010-11-05

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].

 70
Author: wkl,
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