سؤال

انا برمجة الموقع في أي من المستخدمين سوف يكون لها عدد من الإعدادات ، مثل اختيار الألوان ، إلخ.أنا سعيد لتخزين هذه كما نص عادي الملفات الأمنية ليست قضية.

الطريقة التى نرى حاليا هو:هناك قاموس, حيث كل مفاتيح المستخدمين و القيم القواميس مع إعدادات المستخدمين في نفوسهم.

على سبيل المثال ، userdb["بوب"]["colour_scheme"] سيكون لها قيمة "الأزرق".

ما هي أفضل طريقة لتخزين على الملف ؟ التخليل القاموس ؟

هل هناك طرق أفضل من فعل ما أحاول أن أفعله ؟

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

المحلول

cPickle على القاموس سيكون بلدي خيار. القواميس هي نوبة طبيعية لهذا النوع من البيانات، لذلك تعطى الاحتياجات الخاصة بك لا أرى أي سبب لعدم استخدامها. ذلك، إلا إذا كنت تفكر في قراءتها من التطبيقات غير الثعبان، وفي هذه الحالة عليك أن استخدام تنسيق نص محايد اللغة. وحتى هنا يمكن أن تحصل بعيدا مع المخلل بالإضافة إلى أداة تصدير.

نصائح أخرى

وأود أن استخدام ConfigParser وحدة، والتي تنتج بعض الانتاج قراءة جميلة والمستخدم للتحرير على سبيل المثال الخاص بك:

[bob]
colour_scheme: blue
british: yes
[joe]
color_scheme: that's 'color', silly!
british: no

والتعليمة البرمجية التالية سوف ينتج ملف التكوين أعلاه، ومن ثم طباعته:

import sys
from ConfigParser import *

c = ConfigParser()

c.add_section("bob")
c.set("bob", "colour_scheme", "blue")
c.set("bob", "british", str(True))

c.add_section("joe")
c.set("joe", "color_scheme", "that's 'color', silly!")
c.set("joe", "british", str(False))

c.write(sys.stdout)  # this outputs the configuration to stdout
                     # you could put a file-handle here instead

for section in c.sections(): # this is how you read the options back in
    print section
    for option in c.options(section):
            print "\t", option, "=", c.get(section, option)

print c.get("bob", "british") # To access the "british" attribute for bob directly

لاحظ أن ConfigParser يعتمد فقط السلاسل، لذلك سيكون لديك لتحويل كما قلت أعلاه لالقيم المنطقية. انظر effbot للحصول على جيد متهدم من الأساسيات.

لا معالجة مسألة واحد الذي هو أفضل.إذا كنت ترغب في التعامل مع النص-ملفات, كنت تنظر ConfigParser وحدة.آخر يمكن أن تعطي حاول أن تكون simplejson أو yaml.هل يمكن أن تنظر أيضا في الحقيقية db الجدول.

فعلى سبيل المثال ، يمكن أن يكون لديك جدول يسمى userattrs مع ثلاثة أعمدة:

  • الباحث user_id
  • سلسلة attribute_name
  • سلسلة attribute_value

إذا كان هناك عدد قليل فقط, هل يمكن تخزينها في ملفات تعريف الارتباط لاسترجاع سريع.

هنا أبسط طريقة.استخدام المتغيرات البسيطة ، import ملف الإعدادات.

استدعاء الملف userprefs.py

# a user prefs file
color = 0x010203
font = "times new roman"
position = ( 12, 13 )
size = ( 640, 480 )

في التطبيق الخاص بك, عليك أن تكون متأكدا من أنه يمكنك استيراد هذا الملف.لديك العديد من الخيارات.

  1. باستخدام PYTHONPATH.تتطلب PYTHONPATH يتم تعيين لتشمل الدليل مع ملفات تفضيلات.

    أ.صريح معلمة سطر الأوامر إلى اسم الملف (لا أفضل, ولكن بسيطة)

    ب.متغير بيئة إلى اسم الملف.

  2. تمديد sys.path يشمل الدليل الرئيسي للمستخدم

على سبيل المثال

import sys
import os
sys.path.insert(0,os.path.expanduser("~"))
import userprefs 
print userprefs.color

قاعدة بيانات يحركها الموقع, بالطبع, الخيار الأفضل هو db الجدول.أفترض أنك لم تفعل قاعدة البيانات الشيء.

إذا كنت لا تهتم حول الإنسان للقراءة الأشكال ، ثم pickle هو وسيلة بسيطة ومباشرة إلى الذهاب.لقد سمعت أيضا تقارير جيدة عن simplejson.

إذا كان الإنسان القراءة مهم اثنين من خيارات بسيطة تطرح نفسها:

الوحدة النمطية: مجرد استخدام وحدة.إذا كان كل ما تحتاجه هي بعض globals ولا شيء يتوهم ، ثم وهذا هو الطريق للذهاب.إذا كنت قد حصلت حقا يائسة ، يمكنك تحديد فئات الطبقة المتغيرات لمحاكاة أقسام.الجانب السلبي هنا:إذا كان الملف سوف يكون باليد تحريرها من قبل المستخدم, أخطاء يمكن أن يكون من الصعب اللحاق و التصحيح.

INI الشكل: لقد تم استخدام ConfigObj هذا مع قدرا كبيرا من النجاح.ConfigObj أساسا بديلا ConfigParser ، مع دعم متداخلة أقسام وأكثر من ذلك بكثير.اختياريا, يمكنك تحديد المتوقع أنواع أو قيم الملف و التحقق من صحة ذلك ، وتوفير شبكة أمان (و أهمية ردود الفعل خطأ) للمستخدمين/الإداريين.

وأود أن استخدام الرف أو أحد < وأ href = "http://www.python.org/doc/2.5.2/lib/module-sqlite3.html" يختلط = "نوفولو noreferrer"> سكليتي قاعدة البيانات إذا كنت قد لتخزين هذه الإعداد على نظام الملفات. وعلى الرغم من منذ كنت بناء موقع على شبكة الانترنت ربما كنت تستخدم نوعا من قاعدة بيانات فلماذا لا مجرد استخدام ذلك؟

والمدمج في sqlite3 حدة من شأنه أن ربما تكون أبسط بكثير من معظم البدائل، ويحصل أنت مستعد لتحديث إلى RDBMS كامل يجب ان كنت تريد من أي وقت مضى أو في حاجة إليها.

إذا كان الإنسان readablity من configfiles المسائل بديل قد يكون على ConfigParser وحدة والذي يسمح لك قراءة و كتابة .ini مثل ملفات.ولكن بعد ذلك كنت تقتصر على أحد مستوى التداخل.

إذا كان لديك قاعدة بيانات، قد أقترح تخزين الإعدادات في قاعدة البيانات. ومع ذلك، فإنه يبدو وكأنه ملفات عادية قد تناسب البيئة بشكل أفضل.

وربما كنت لا تريد تخزين <م> جميع إعدادات المستخدمين في نفس الملف، لأنك قد واجهت مشاكل مع الوصول المتزامن إلى أن ملف واحد. إذا كنت تخزين إعدادات كل مستخدم كقاموس في ملف مخلل الخاصة بهم، ثم أنها سوف تكون قادرة على العمل بشكل مستقل.

والتخليل هو وسيلة معقولة لتخزين هذه البيانات، ولكن للأسف تنسيق البيانات المخلل هو ملاحظ ليس من إنسان قابل للقراءة. هل يمكن أن يكون أفضل حالا تخزينه كما repr(dictionary) الذي سيكون شكل أكثر قابلية للقراءة. لتحديث إعدادات المستخدم، استخدم eval(open("file").read()) أو شيء من هذا القبيل.

هل هناك سبب معين كنت لا تستخدم قاعدة البيانات لهذا؟ يبدو أن شيء عادي وطبيعي أن تفعل - أو تخزين المخلل من الإعدادات في ديسيبل مرتبطا على هوية المستخدم أو شيء

ولقد وليس وصفها أنماط استخدام الموقع، ولكن مجرد التفكير في موقع على شبكة الانترنت العام - ولكن أعتقد أن حفظ الإعدادات في قاعدة بيانات من شأنها أن تسبب أقل بكثير القرص I / O من استخدام الملفات

.

وOTOH، عن الإعدادات التي يمكن استخدامها من قبل رمز العميل، وتخزينها كما جافا سكريبت في ملف ثابت يمكن أن يكون مؤقتا سوف تكون في متناول اليد - على حساب وجود أماكن متعددة قد يكون لديك الإعدادات. (فما استقاموا لكم فاستقيموا ربما تخزين هذه الإعدادات في ديسيبل، وإعادة بناء الملفات الثابتة عند الضرورة)

وأنا أتفق مع رد حول استخدام مخلل قاموس. بسيطة جدا وفعالة لتخزين البيانات بسيطة في الهيكل القاموس.

إذا كنت لا تهتم أن تكون قادرة على تحرير الملف نفسك، وتريد وسيلة سريعة لتستمر الأجسام الثعبان، والذهاب مع <لأ href = "http://www.python.org/doc/2.5.2 /lib/module-pickle.html "يختلط =" نوفولو noreferrer "> المخلل . إذا كنت لا تريد ملف لتكون قابلة للقراءة من قبل الإنسان، أو قراءة بعض التطبيقات الأخرى، استخدم <لأ href = "http://www.python.org/doc/2.5.2/lib/module-ConfigParser.html" يختلط = "نوفولو noreferrer"> ConfigParser . إذا كنت بحاجة إلى أي شيء أكثر تعقيدا، والذهاب مع نوع من قاعدة البيانات، سواء كان ذلك العلائقية (<لأ href = "http://www.python.org/doc/2.5.2/lib/module-sqlite3.html" يختلط = " نوفولو noreferrer "> سكليتي )، أو وجوه المنحى ( بديهية ، zodb ).

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