سؤال

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

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

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

المحلول

انها معقولة، وأنا أفعل ذلك طوال الوقت. من الواضح أنه ليس تنسيقا تستخدمه لتبادل البيانات، لذلك ليس شكل جيد لأي شيء مثل حفظ ملف حفظ.

ولكن على سبيل المثال، عندما أقوم بتحريزات مواقع الويب إلى Plone، غالبا ما أحصل على بيانات حول الموقع (مثل قائمة الصفحات التي يجب أن يتم ترحيلها، أو قائمة بكيفية تعيين عناوين المواقع القديمة إلى جديدة، قوائم AOR للعلامات ). هذه عادة ما تحصل في تنسيق Word Och Excel. أيضا البيانات غالبا ما تحتاج إلى تدليك قليلا، وينتهي بك الأمر مع ما لجميع النوايا والأغراض هي القواميس تعاني من تعيين عنوان URL لبعض المعلومات الأخرى.

بالتأكيد، أنا استطاع احفظ ذلك ك CVS، وتحليله في قاموس. ولكن بدلا من ذلك، أحفظها عادة كملف ثعبان مع قاموس. يحفظ الرمز.

لذلك، نعم، إنه أمر معقول، لا، ليس شكل يجب استخدامه لأي نوع من حفظ ملف. لكن غالبا ما تستخدم للبيانات التي تنتقل الحدود إلى التكوين، مثل أعلاه.

نصائح أخرى

من خلال تشغيل هذه الطريقة، قد تكسب بعض المواطن من الراحة، لكنك تدفع أنواع كثيرة من السعر لذلك. المساحة التي يتطلبها حفظ بياناتك، والوقت الذي يتطلبه الأمر إلى كل من حفظ وإعادة تحميله، ارتفع بشكل كبير؛ ويعرضك الأمان الخاص بك غير محدود - يجب عليك حراسة شرسة المسارات التي قمت بإعادة تحميل الوحدات النمذينة منها، حيث إنها ستقدم وسيلة سهلة لأي مهاجم لحقن رمز خيارهم ليتم تنفيذها تحت UserID الخاص بك (pickle في حد ذاته ليس الصخور والأمن الحكيم، ولكن، مقارنة بهذا الترتيب، يضيء ؛-).

الكل في الكل، أنا أفضل ترتيب أبسط وأكثر تقليدية: يعيش التعليمات البرمجية القابلة للتنفيذ في وحدة واحدة (على مسار تحميل رمز نموذجي، لا يحتاج إلى أن يكون R / W بمجرد ترجمة الوحدة المترجمة) - يتم تحميله مرة واحدة فقط و من شكل بالفعل. تعيش البيانات في ملفاتهم الخاصة (أو أجزاء من DB، إلخ) في أي من التنسيقات العديدة العديدة، معظمها القياسية (ربما بما في ذلك العديد من الألوان متعددة اللغات مثل JSON، CSV، XML، ... & C، إذا أردت الاحتفاظ بها الخيار مفتوح لتحميل هذه البيانات بسهولة من لغات أخرى في المستقبل).

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

خيار معقول قد يكون استخدام ورطة الوحدة النمطية المصممة خصيصا لحفظ واستعادة هياكل Python على القرص.

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

JSON هو بسيط، وخريطة بيانات Python خريطة جيدة في ذلك؛ وهناك العديد من المكتبات والأدوات القياسية للعمل مع JSON. ال json الوحدة النمطية في بيثون 3.0 والأحدث تستند إلى simplejson., لذلك سوف تستخدم simplejson في بيثون 2.x و json في بيثون 3.0 والأحدث.

الاختيار الثاني هو XML. XML أكثر تعقيدا، وأصعب فقط إلقاء نظرة فقط على (أو مجرد تعديل مع محرر نصوص) ولكن هناك ثروة واسعة من الأدوات للتحقق من صحةها، وتصفيةها، تحريرها، إلخ.

أيضا، إذا احتاجت احتياجات تخزين البيانات واسترجاعك على الإطلاق، فكر في استخدام قاعدة بيانات فعلية. sqlite. رائع: إنه صغير، وبالنسبة لقواعد البيانات الصغيرة تعمل بسرعة كبيرة، لكنها قاعدة بيانات SQL الفعلية الحقيقية. بالتأكيد أود استخدام Python Orm بدلا من تعلم SQL للتفاعل مع قاعدة البيانات؛ بلدي orm المفضل ل sqlite سيكون الخريف (صغيرة وبسيطة)، أو orm من جانغو (لا تحتاج حتى إلى تعلم كيفية إنشاء جداول في SQL!) ثم إذا كنت قد تجاوزت SQLite، فيمكنك نقل ما يصل إلى قاعدة بيانات حقيقية مثل postgresql.. وبعد إذا وجدت نفسك تكتب الكثير من الحلقات التي تبحث من خلال البيانات المحفوظة، وخاصة إذا كنت بحاجة إلى فرض التبعيات (مثل حذف FOO حذفها، يجب حذف الشريط أيضا) بالنظر في الذهاب إلى قاعدة بيانات.

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