Ich versuche, mehrere Funktionen aus separaten Dateien alle mit den gleichen Namen in Python 3.Validieren mehrere Module mit Python3
So zu validieren, halte ich ein Verzeichnis von Verzeichnissen haben: dir1
die s1
hat, s2
, s3
, ..., sn
, die alle Verzeichnisse sind und jeweils eine Datei mit dem Namen submission.py
enthalten. Ich weiß nicht, was s1
durch sn
bis zur Laufzeit sind.
In jedem submission.py
gibt es Funktionen f1
bis fm
.
Ich möchte ein Skript erstellen, die f1
durch fm
ausführt und druckt ihre Ausgabe für jeden s1
durch sn
‚s submission.py
Datei.
Ich würde gerne denken, dass ich jede submission.py
Datei in jedem Verzeichnis importieren konnte, aber das Problem ist, dass jede Datei denselben Namen hat. Auch s1
bis sn
ist bis zur Laufzeit nicht bekannt. Offensichtlich kann ich s1
durch sn
unter Verwendung der os.listdir()
Funktion bestimmen.
Irgendeine Idee, wie ich f1
aus zwei verschiedenen Dateien aufrufen kann, nachdem ich die Namen der Verzeichnisse durch os.listdir()
und os.path.isdir()
bekommen habe?
Ein anderes Plakat vorgeschlagen dies für 2.7:
Dies ist möglich,
imp
verwenden.
import os, imp
dirs = os.listdir('.')
modules = {d: imp.load_source(d, d + '/submission.py') for d in dirs}
dann eine Funktion f3
im submission.py
Modul in Unterverzeichnis s2
beispielsweise enthalten sind, zu nennen, wäre es: modules['s2'].f3()
.
Dies wäre eine perfekte Lösung. Kann jemand eine ähnliche Lösung in Python 3.4 oder 3.5 vorschlagen?
Betrachten Sie [Importlib] (https: //docs.python.org/3/library/importlib.html) – SiHa
Going to guckt das. Können Sie mir vorschlagen, wie ich es benutzen würde? –
Die Dokumentation, die ich verlinkte, ist ziemlich umfangreich. Warum nicht einfach versuchen und sehen, wie es dir geht? Der Teil über die Module, die alle denselben Namen haben, spielt keine Rolle, wenn sie sequentiell importiert werden. Bei jedem nachfolgenden Import wird einfach der vorherige im Python-Namespace überschrieben. – SiHa