سؤال

أنا أتعلم عن التسلسل الكائن لأول مرة. حاولت القراءة و "googling" للاختلافات في الوحدات النمطية المخللة والرفوف لكنني لست متأكدًا من فهمه. متى تستخدم أي واحد؟ يمكن أن يحول المخلل كل كائن بيثون إلى دفق من البايتات التي يمكن استمرارها في ملف. ثم لماذا نحتاج إلى وحدة الرفى؟ أليس المخلل أسرع؟

هل كانت مفيدة؟

المحلول

pickle هو لتسلسل بعض الكائنات (أو الكائنات) باعتبارها bytestream واحدة في ملف.

shelve يبني فوق pickle ويقوم بتنفيذ قاموس تسلسل حيث يتم انخفاض الكائنات ، ولكن مرتبطًا بمفتاح (بعض السلسلة) ، بحيث يمكنك تحميل ملف البيانات الخاص بك والوصول إلى كائناتك المخللة عبر المفاتيح. قد يكون هذا أكثر ملاءمة لو أن تسلسل العديد من الأشياء.

فيما يلي مثال على الاستخدام بين الاثنين. (يجب أن تعمل في أحدث إصدارات Python 2.7 و Python 3.x).

pickle مثال

import pickle

integers = [1, 2, 3, 4, 5]

with open('pickle-example.p', 'wb') as pfile:
    pickle.dump(integers, pfile)

هذا سوف تفريغ integers قائمة بملف ثنائي يسمى pickle-example.p.

حاول الآن قراءة الملف المخلل مرة أخرى.

import pickle

with open('pickle-example.p', 'rb') as pfile:
    integers = pickle.load(pfile)
    print integers

يجب أن يخرج أعلاه [1, 2, 3, 4, 5].

shelve مثال

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

لاحظ كيفية إضافة كائنات إلى الرف عبر الوصول الذي يشبه القاموس.

اقرأ الكائن مرة أخرى برمز مثل ما يلي:

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

سيكون الإخراج 'ints', [1, 2, 3, 4, 5].

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top