Python Ordner includen?
Man kann ja mit
os.system("python test.py")
eine andere Python Datei einbinden.
Nun möchte ich aber, das man direkt ein Ordner auswählt und jedes einzelne .py File das in dem Ordner ist included wird.
Geht sowas?
3 Antworten
Um Gottes Willen. Ich bin ja einiges gewöhnt, aber das ist schon eine spezielle Variante von verrückter Idee. Kommt das aus einem dieser YT-Tutorials?
os.system("python test.py")
Das hier oben bedeutet: starte eine neue Instanz von Python über die Shell, lass sie das gewählte Python-Programm ausführen, Ende. Das macht für deinen laufenden Prozess gar nichts.
Der korrekte (und funktionierende) Weg zum Einbinden von Code ist über das Modulsystem, sprich das Schlüsselwort "import". In Einzelfällen kann auch eval() sinnvoll sein.
Das funktioniert aber nicht.
Ja, weil du den Namen qualifizieren musst:
chekov.question()
aber wie kann ich ein ganzen Ordner mit allen Python Files darin importieren?
Du kannst den Package-Mechanismus verwenden, ob das aber genau das tust was du willst, musst du dir ansehen. Ich bin mir eigentlich nicht sicher wofür du das tun willst.
Ah, ich seh gerade, du hast die Form from-import verwendet, da sollte es tatsächlich ohne Qualifikation gehen. Die Frage ist halt ob der Import überhaupt geklappt hat.
Das klappt ja schon einmal gut. Nur ich will direkt alle Files Importieren und das darf ich nicht manuell machen.
z.B. wenn die Datei test.py heißt funktioniert das so
import folder.test
aber in dem "folder" sind 3 weiter Dateien:
123.py
test.py
hallo.py
moin.py
Jetzt könnte ich es so für jede Datei einzeln machen:
import folder.123
import folder.test
import folder.hallo
import folder.moin
Ich kann das in meinem Fall aber nicht lösen! Ich muss direkt alle Files auswählen.
Aber:
import folder
funktioniert z.B. nicht.
Also:
Ich will direkt alle Dateien aus meinem Ordner auswählen und einbinden und das darf ich nicht manuell machen
https://docs.python.org/3/library/importlib.html
Readdir() und dann einfach alel entsprechenden Dateien importieren - wenn DU es dynamisch brauchst.
Spricht etwas gegen __init__.py und __all__ ?
Ich frage mich immer noch ob so ein Hack wirklich nötig ist. Ist in den Files überhaupt nennenswert Code drin, oder sind das eh nur Daten? Dann kann man sich das sparen und entsprechend ganz normal zur Laufzeit reinlesen.
Prüfe (durch Ausprobieren), ob Pythons Methode os.system() auch Parameter erlaubt, die Wildcards enthalten.
Sollte das nicht der Fall sein, musst du tatsächlich den Befehl für jede Datei einzeln hinschreiben.
|
Wie auf Seite https://www.python-kurs.eu/os_modul_shell.php erklärt wird, nimmt os.system() als Parameter einen Shell-Befehl. Dies spricht dafür, dass Wildcards erlaubt sind.
For loop mit allen dateien im ordner?
Ich weiß nicht genau was du meinst, ich erkläre es aber noch einmal genauer.
In meinem Haupt Python File habe ich meine ganzen anderen .py Files hinzugefügt, damit es übersichtlicher ist.
Jetzt sieht das in meiner Haupt Datei so aus:
os.system("python testordner/test.py")
os.system("python testordner/test1.py")
os.system("python testordner/test2.py")
os.system("python testordner/test3.py")
Ich möchte aber am besten direkt alle Python Files aus dem Ordner "testordner" importieren und dies nicht für jedes einzeln tun. Geht das?
for i in ordner.namen:
NameError: name 'ordner' is not defined
obwohl mein Ordner auch Ordner heißt, funktioniert das irgendwie nicht
Das war pseudo code, kann also so nicht verwendet werden. Du musst nach einer methode suchen, mit der du durch einen ordner iteraten kannst. Ich würde diese imports übrigens über imports machen.
Ich hatte am Anfang versucht es zu importen, hat aber nicht geklappt.
Habe das probiert:
Das funktioniert aber nicht.
Jedenfalls, habe ich zwar verstanden das ich es mit import importieren muss, aber wie kann ich ein ganzen Ordner mit allen Python Files darin importieren?