Seite 1 von 1

Import einer Datei (als list item)

Verfasst: Donnerstag 3. Dezember 2020, 16:08
von bendixbendix
Moin,
bin Anf├Ąnger und versuche mich etwas in Python ­čśä

Aktuell versuche ich verschiedene Skripte in ein anderes zu importieren.
Ich nutze die Sikuli IDE und habe mehrere Skripte, die in einer immer anderen Reihenfolge importiert und ausgef├╝hrt werden sollen.
Ich habe also ein main script von dem aus andere Skripte (im Beispiel Test1, Test2 und Test3) importiert bzw ausgef├╝hrt werden sollen.

Das importieren alleine klappt wunderbar, das Erstellen einer unregelm├Ąssigen Reihenfolge ebenso, ich bekomme es nur nicht zusammen...
mein Code f├╝r eine unregelm├Ąssige Reihenfolge sieht so aus:
import random

scriptlist = ['Test1', 'Test2', 'Test3']
print("These are the scripts I want to execute " , scriptlist)
random.shuffle(scriptlist)
print("So I shuffled them to a new order " , scriptlist)
print("then I'll pick always the first of the list to execute it and then remove the first of that list")
print("The first script to take would be " + scriptlist[0])
scriptlist.pop(0)
print("The second script to take would be " + scriptlist[0])
scriptlist.pop(0)
print("The third script to take would be " + scriptlist[0])
Nun w├╝rde ich gerne die Listitems importieren, also jeweils das erste der Liste, bevor es f├╝r den n├Ąchsten Schritt der Liste entnommen wird.

In der Sikuli IDE geht das importieren einer Weiterren Sikuli Datei ganz einfach mittels:
import Test1
Nun bekomme ich es aber nicht hin, dass z.B.
import (scriptlist(0))
die Datei importiert...
Stattdessen bekomme ich immer die Fehlermeldung "invalid syntax".

Hat jemand eine Idee, welchen Fehler ich mache? oder ist das so, wie ich es mir vorstelle garnicht m├Âglich?
Bin ganz neu bei Python, lerne jeden Tag dazu, aber eine L├Âsung hierf├╝r habe ich noch nicht finden k├Ânnen und w├Ąre total dankbar f├╝r Hilfe!

Gr├╝├če

Re: Import einer Datei (als list item)

Verfasst: Donnerstag 3. Dezember 2020, 18:45
von __blackjack__
@bendixbendix: Erst mal etwas zum gezeigten Quelltext: Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht ├╝blicherweise in einer Funktion die `main()` heisst.

Modulnamen werden klein geschrieben, also "test1", "test2", und so weiter. Wobei das hoffentlich nur Beispiele sind und die tats├Ąchlichen Namen a) besser beschreiben was das Modul enth├Ąlt und b) nicht nummeriert sind.

Grunddatentypen haben nichts in Namen zu suchen. `scriptlist` sollte also besser `module_names` heissen, denn das enth├Ąlt die Liste letztlich: Modulnamen.

Das mit dem `pop()` verstehe ich nicht. Warum muss diese extra Arbeit vom Rechner gemacht werden um die Namen aus der Liste zu entfernen? Und dann auch noch so ung├╝nstig vom Anfang der Liste her? Letztlich k├Ânnte man doch einfach eine Schleife ├╝ber die Liste schreiben und sich damit den wiederholten, fast gleichen Code ersparen.

Zwischenstand:

Code: Alles ausw├Ąhlen

#!/usr/bin/env python3
import random


def main():
    module_names = ["test1", "test2", "test3"]
    print("These are the scripts I want to execute:", module_names)
    random.shuffle(module_names)
    print("So I shuffled them to a new order:", module_names)
    for ordinal, module_name in zip(
        ["first", "second", "third"], module_names
    ):
        print(f"The {ordinal} script to take would be {module_name}")


if __name__ == "__main__":
    main()
Da das mit dem Code auf Modulebene und der `main()` auch f├╝r die anderen Module gelten sollte, ist es egal in welcher Reihenfolge man die importiert. Man importiert die einfach und statt einer Liste mit den Modulnamen, erstellt man eine mit den Modulen selbst, mischt die, und ruft dann nacheinander die `main()`-Funktion in jedem der Module auf:

Code: Alles ausw├Ąhlen

#!/usr/bin/env python3
import random

import test1
import test2
import test3


def main():
    modules = [test1, test2, test3]
    print(
        "These are the scripts I want to execute:",
        ", ".join(module.__name__ for module in modules),
    )
    random.shuffle(modules)
    print(
        "So I shuffled them to a new order:",
        ", ".join(module.__name__ for module in modules),
    )
    for ordinal, module in zip(["first", "second", "third"], modules):
        print(f"Executing the {ordinal} program: {module.__name__}")
        module.main()


if __name__ == "__main__":
    main()

Re: Import einer Datei (als list item)

Verfasst: Freitag 21. Mai 2021, 08:02
von bendixbendix
besser sp├Ąt, als nie ­čśä
vielen Dank f├╝r deine Antwort!

Ging irgendwie unter zu antworten.

Liebe Gr├╝├če