تحميل الوحدة النمطية ديناميكية بيثون بناءً على الإدخال

StackOverflow https://stackoverflow.com/questions/2180539

  •  24-09-2019
  •  | 
  •  

سؤال

لقد كتبت برنامجًا يأخذ خلاصة جزئية لـ RSS ويخرج برنامجًا كاملاً ، لكنه أحدهما على أساس كل حالة على حدة. الوصفة لموقع واحد ليست هي نفسها وصفة أخرى. إذن ما أقوم به هو إلقاء نظرة على اسم المجال (على سبيل المثال NYT أو WSJ) واختيار وحدة نمطية بناءً على ذلك. على الرغم من أنني بحاجة إلى تحميل كل وحدة قبل اليد ولدي شرط منطقي لكل وصفة.

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

هنا مثال رمز

if "nyt" == feed:
        nyt.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

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

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

المحلول

يبدو أنك تبحث عن __import__ وظيفة. هذه الوظيفة تفعل نفس الشيء مثل import بيان ، ولكنه يسمح لك بتمرير اسم للاستيراد الذي قد يكون معروفًا فقط في وقت التشغيل.

لذلك قد تفعل:

parsemodule = __import__(feed)
parsemodule.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

سترغب في الحصول على استثناءات مثل ImportError.

نصائح أخرى

يمكنك استعمال ال وحدة IMP.

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