Frage

Ich schrieb ein Programm, das in einem Teil-RSS-Feed nimmt und gibt eine vollen, aber es ist ein ein von Fall zu Fall. Das Rezept für einen Standort ist nicht das gleiche wie das Rezept für den anderen. Also, was ich tue, ist Blick auf den Domain-Basisnamen (zum Beispiel New York Times oder Wall Street Journal) und ein Modul auf dieser Grundlage entscheiden. Obwohl ich brauche jeden einzelnen Modul vor der Hand und habe eine logische Bedingung für jedes Rezept zu laden.

Was ich brauche, ist ein Weg, um nur die einzelnen Module in ihren eigenen jeweiligen Ordner und wenn ich die URL Basisnamen analysieren, möchte ich es für das Modul suchen, laden Sie es und etwas unternehmen. Also habe ich die Hauptcodebasis sein, unabhängig von den Modulen will. Ich möchte in der Lage sein, die Module in Zukunft hinzuzufügen und nie den Teil des Codes zu berühren, die mit ihnen zu interagieren.

Hier ist ein Codebeispiel

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

Wie man sehen kann ich den Parser des einzelnen Moduls aufrufen. Ich habe viele von ihnen auf jeder Website basiert. Ich möchte Reed-Feed und dann für das Modul aussehen können, laden Sie es und nennen es, und dann, wenn es nicht vorhanden melden Sie es und versuchen, die Standardmethode.

War es hilfreich?

Lösung

Es klingt wie Sie suchen für die __import__ Funktion. Diese Funktion macht das Gleiche wie die import Aussage, sondern ermöglicht es Ihnen, einen Namen zu importieren zu übergeben, die zur Laufzeit könnten nur bekannt ist.

So Sie tun könnten:

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

Sie werden zu fangen Ausnahmen wollen wie ImportError.

Andere Tipps

Sie können mit der imp Modul .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top