codesnipped in file auslagern??

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Christian
User
Beiträge: 2
Registriert: Dienstag 29. Juli 2003, 14:38

hallo!

ich möchte von fall zu fall andere module in mein python script laden. da ich aber keinen modulnamen als variable nehmen kann. möchte ich nun eine if-abfrage drum rum schreiben:

beispiel:

Code: Alles auswählen

if x == 1:
    from DetailScript import Mod as Modifier
if x == 2:
    from DetailScript import Bla as Modifier
da von zeit zu zeit neue scripte hinzukommen und ich nicht ständig das script bearbeiten möchte, will ich diesen teil in eine separate datei auslagern. und dann in meinem script einfach dieses txt file einbinden.

ist das möglich?


oder kennt vieleicht jemand eine ellegante lösung, wie ich z.b. den namen des zu importierenden moduls per variable an das script übergeben könnte?

freue mich über viele hilfreiche antworten...

viele grüße,
christian
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Schreib den teil doch in ein extra Modul und mach im Hauptprogramm dann:

Code: Alles auswählen

from zwischenmodul import *
dann hast du auch alles im Hauptprogram...
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Du kannst Dir auch den Python-Modul-Lademechanismus anschaueen.
Es gibt Möglichkeiten Module direkt aus Dateien/Stringgs zu generieren ähnlich wie eval.

cu beyond
NEBULA
User
Beiträge: 25
Registriert: Mittwoch 5. März 2003, 11:59
Wohnort: Kleve/NRW

Es gibt die __import__ Funktion, liegt die Moduldatei die du laden willst im Pythonpfad dann kannst du ueber diese Funktion das Modul laden.

Bsp:

Code: Alles auswählen

modul = __import__(<Dateiname ohne Endung>,globals(),locals(),[])
Eine andere und vielleicht die bessere Variante ist du benutzt das Modul imp aus der Standardbibliothek und benutzt aus diesem Modul die Funktion load_source.

Code: Alles auswählen

import imp
load_source(name, pathname, file) 
Wichtig dabei ist, dass file wirklich ein Dateiobjekt ist, sprich etwas wie open("x.y","r")

Diese Methode hab ich selbst allerdings bislang nicht genutzt, ich hab bislang die __import__-Funktion genutzt.
Antworten