الدالة shelve.open()‎ في بايثون

من موسوعة حسوب
< Python‏ | shelve
اذهب إلى التنقل اذهب إلى البحث


تفتح الدالة قاموسًا مستمرًّا.

البنية العامة

shelve.open(filename, flag='c', protocol=None, writeback=False)

‎المعاملات

filename

اسم الملف الأساسي لقاعدة البيانات الداخلية. يمكن إضافة امتداد إلى اسم الملف ويمكن أيضًا إنشاء ملفات متعددة. تفتح الدالة افتراضيًا ملف قاعدة البيانات الداخلي في وضعي القراءة والكتابة.

flag

معامل اختياري وهو مشابه للمعامل flag في الدالة dbm.open()‎.

protocol

تستخدم الوحدة افتراضيًا الإصدار 3 من pickle لسلسلة القيم، ويمكن تحديد إصدار بروتوكول السَلسَلة باستخدام المعامل protocol.

writeback

لا يستطيع الرفّ -بسبب طبيعة لغة بايثون- معرفة اللحظة التي تجرى فيها التعديلات على قاموس مستمرّ قابل للتعديل. تُكتب الكائنات المعدّلة افتراضيًا عند إسنادها إلى الرفّ فقط (راجع المثال في وحدة shelve). إن أخذ المعامل الاختياري writeback القيمة True، فإنّ جميع المدخلات التي تم الوصول إليها ستُخزن في الذاكرة المخبئية، ويعاد كتابتها عند استدعاء التابعين sync()‎ و close()‎. يسهّل هذا الأمر عملية تعديل المدخلات القابلة للتعديل mutable في القاموس المستمر، ولكن في حال الوصول إلى عدد كبير من العناصر سيكون مقدار الذاكرة المستهلكة كبيرًا جدًّا الأمر الذي قد يؤدي إلى جعل عملية الإغلاق بطيئة للغاية وذلك لأنّ جميع العناصر التي تم الوصول إليها سيعاد كتابتها (لا توجد طريقة لتمييز العناصر القابلة للكتابة من بين العناصر التي يتم الوصول إليها، ولا توجد طريقة لتمييز العناصر المعدّلة أصلًا).

ملاحظة:

لا تتوقع أن يُغلق الرفّ تلقائيًا بل استدعِ الدالة close()‎ دائمًا عندما لا تحتاج إلى استخدام الرف أو استخدم الدالة shelve.open()‎ كمدير للسياق:

with shelve.open('spam') as db:
   db['eggs'] = 'eggs'

مصادر

صفحة Python object persistence في توثيق بايثون الرسمي.