Funktion in Datei mit Bindestrich im Namen aufrufen

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
Frokuss
User
Beiträge: 16
Registriert: Mittwoch 5. Juni 2019, 20:35

Hallo Leute,

ihr werdet wohl noch häufiger von mir hören :-D
Ich soll lauf Aufgabenstellung eine Datei mit der Bezeichnung daten-einlesen.py erstellen. In dieser Datei habe ich nun eine Funktion (seperator_ermitteln). Wie kann ich die nun über die Console (oder was ist das?) aufrufen?

Ich habe jetzt sowas ausprobiert:

Code: Alles auswählen

datenEinlesen = __import__("daten-einlesen")#Danke fuer den Sonderfall mit einem Bindestrich im Dateinamen!
from datenEinlesen import seperator_ermitteln
from __import__("daten-einlesen") import seperator_ermitteln
Und ehrlich, ich würde ja die Datei einfach umbenennen, wenn das nicht die Vorgabe wäre :twisted:
Erstellen Sie für jeden der folgenden Schritte einer Datenanalyse mit Python Scikit-Learn einen „Pro-grammierbaustein“, also ein Quelltextfragment, mit dem Sie statistische Daten verarbeiten können.Speichern Sie die Programmierbausteine in einem OrdnerProgrammierbausteine. Geben Sie dazujeweils auch die Anweisungen an, um die notwendigen Python-Module und Pakete zu importieren.
(a)Einlesen von Daten aus einer Datei:Gegeben sei eine CSV-Datei, die als Zellseparator ent-weder ein Komma, ein Semikolon oder einen Tabulator hat. Schreiben Sie die Befehle in eineQuelltextdatei
daten-einlesen.py,
mit der die Daten nach Python importiert und die Konfiguration von Dateinamen, Verzeich-nispfad und Separator übersichtlich eingestellt werden kann. (Insbesondere: Wie kann man dieMerkmalswerteXund die abhängige Variableyfestlegen?)
Sorry, für das generve... Lieben Gruß
Frokuss
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du rufst die Datei direkt auf. "python daten-einlesen.py".
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich würde mich dabei einfach, natürlich mit einer Begründung, über diese Vorgabe hinwegsetzen und aus dem Binde- einen Unterstrich machen. *.py-Dateien stellen Python-Module dar und Modulnamen sind den Regeln für Variablennamen unterworfen. Wenn man sich da nicht dran hält, handelt man sich nur unnötige Probleme ein. Vom normalen Importieren über Unitttests, statischer Code-Analyse, bis hin zum extrahieren von Dokumentation – alles erwartet von *.py-Dateien, das die gültige Namen haben.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__: das stimmt alles, ich vermute aber mal, das der TE das Programm abgeben muss, und der umgebende test-harness dann erwartet, dass die Datei genau so heisst. Spaetestens dann sollte sie so heissen.
Frokuss
User
Beiträge: 16
Registriert: Mittwoch 5. Juni 2019, 20:35

Genau, das ganze muss ich abgeben. Aber ich habe das ganze jetzt irgendwie hinbekommen...

Code: Alles auswählen

import importlib
datenEinlesen = __import__("daten-einlesen")#Danke fuer den Sonderfall mit einem Bindestrich im Dateinamen!
seperator = importlib.import_module("daten-einlesen", "seperator_ermitteln")

seperator.seperator_ermitteln("sep")
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Mich wundert, warum Studenten heutzutage, oder liegt es am Studiengang, alles, was vom Prof kommt, kommentarlos schlucken.
ich wurde so sozialisiert, alles zu hinterfragen, was nicht klar ist.
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Aber er muss dann selbst tatsächlich mit `__import__()` arbeiten um ganz normal einen ”Programmierbaustein” zu importieren. Das ist doch ein kaputter Entwurf.

@Frokuss: Was ist denn das jetzt für eine krude Mischung. Entweder `__import__()` — und das würde hier ausreichen — oder `importlib`, aber doch nicht beides.

Und wenigstens den Namen im Modul an den das Modul gebunden wird, sollte man dann entsprechend den Namenskonventionen `daten_einlesen` nennen. Beim `import_module()` ist das zweite Argument falsch. Das ist ja wohl kaum das passende Package, das ist ein Funktionsname in dem Modul.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Frokuss
User
Beiträge: 16
Registriert: Mittwoch 5. Juni 2019, 20:35

@sirus: Naja, soll ich bei einem Thema, in dem ich mich gar nicht auskenne, direkt intervenieren? Ich sollte doch davon ausgehen können, dass ein Prof bei einer ersten Aufgabe nicht irgendwelche Sonderfälle behandelt. Hätte ich jetzt Python bereits mehrere Semester gehabt, wäre dies wohl etwas anders! Aber so ist es hier nicht.

@balckjack: Ja du hast Recht, da ich noch nicht so sicher bin. Lasse ich das noch teilweise stehen, bis ich mir sicher bin, dass ich das ganze auch wirklich nicht brauche.

Gruß Frokuss
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Frokuss: Du solltest bei Profs erst einmal davon ausgehen, das die bei Programmieraufgaben keine Ahnung haben was sie da machen, zumindest solange bis sie belastbare Gründe für eine andere Annahme liefern. Die stellen auch gerne mal Aufgaben ohne sich über den tatsächlichen Lösungsweg und ob die Vorgaben so Sinn machen oder gar funktionieren Gedanken zu machen. Das habe ich mehr als einmal erlebt. Es kann also sehr gut sein, dass der Dateiname nur eine Gedankenlosigkeit war, die dem Aufgabensteller selbst aufgefallen wäre wenn er sich daran setzen würde eine Musterlösung zu schreiben. Dann schreibt er diese Datei, und an dem Punkt wo er sie dann an anderer Stelle importieren will/muss, fällt ihm dann auf, ”Oh, der Name ist ungünstig gewählt…”

Ich würde nicht davon ausgehen das der Prof bei der ersten Aufgabe gleich irgendwelche Sonderfälle behandelt, sondern das der selbst die Aufgabe nicht komplett mit einer Lösung vorher durchgearbeitet hat, und da eben solche Stolpersteine drin sind. Nun ist die Frage wie er damit umgeht. Wenn er an diese Stelle kommt bei der Musterlösung, würde er dann anfangen auf biegen und brechen mit diesem Namen klar zu kommen und einen Workaround programmieren, den man eigentlich nicht haben möchte, oder würde er einfach den Namen anpassen, damit man ein ganz normales Programm mit normalen Import-Anweisungen schreiben kann.

Entweder ist dieses Hindernis tatsächlich Absicht und Du solltest lernen wie man Module importiert die einen aus Python-Sicht ungültigen Namen haben, oder der Aufgabensteller hat sich an der Stelle keine Gedanken gemacht.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Frokuss
User
Beiträge: 16
Registriert: Mittwoch 5. Juni 2019, 20:35

OKay. Ich habe allerdings noch nicht so viele Prgrammierungsvorlesungen gehabt, um da eine qualitative Aussage treffen zu können. Ich vermute aber eher das zweitere von dir angesprochene. Er hat sich dazu keine Gedanken gemacht. Da ich Ihn aber erst am DIenstag wieder sehe und ich ab da nur noch eine WOche Zeit habe, muss ich trotzdem diese Aufgabe irgendwie fertig bekommen.

Lieben Gruß Frokuss
nezzcarth
User
Beiträge: 1753
Registriert: Samstag 16. April 2011, 12:47

Frokuss hat geschrieben: Donnerstag 6. Juni 2019, 16:15 Da ich Ihn aber erst am DIenstag wieder sehe und ich ab da nur noch eine WOche Zeit habe, muss ich trotzdem diese Aufgabe irgendwie fertig bekommen.
Falls es einen Tutor o.Ä. gibt, würde ich den fragen, ob das seine Richtigkeit hat, persönlich, oder per E-Mail. Eigentlich wäre das auch Aufgabe des Professors, aber bei größeren Fächern kann es sein, dass die etwas verstimmt reagieren, wenn sie Nachfragen per Mail bekommen :)
Benutzeravatar
kbr
User
Beiträge: 1507
Registriert: Mittwoch 15. Oktober 2008, 09:27

Frokuss hat geschrieben: Donnerstag 6. Juni 2019, 15:29Lasse ich das noch teilweise stehen, bis ich mir sicher bin, dass ich das ganze auch wirklich nicht brauche.
Andersherum ist besser. Füge nur ein, bis Du alles hast, was Du brauchst. Sonst zeigst Du, dass Du es nicht wirklich verstanden hast.
Solange Du die einzulesenden Daten nicht änderst (das wäre exmatrikulationswürdig), modifiziere die Modulnamen ruhig, aber begründe warum. Dann bekommst Du recht schnell eine Info über die Denkweise der Ausbilder in dem Studiengang.
Frokuss
User
Beiträge: 16
Registriert: Mittwoch 5. Juni 2019, 20:35

kbr hat geschrieben: Donnerstag 6. Juni 2019, 19:17
Frokuss hat geschrieben: Donnerstag 6. Juni 2019, 15:29Lasse ich das noch teilweise stehen, bis ich mir sicher bin, dass ich das ganze auch wirklich nicht brauche.
[...] Füge nur ein, bis Du alles hast, was Du brauchst. Sonst zeigst Du, dass Du es nicht wirklich verstanden hast. [...]
Deswegen steht das ganze ja da. Also ich habe mich da jetzt vielleicht etwa 20H mit Python auseinander gesetzt. Und ich behaupte, ich habe bisher noch nichts verstanden. Zudem habe ich mir den Befehl zuerst zusammengeschusert und war mir noch keines Wegs sicher, was ich denn wirklich brauche...

Ich kann hier keine zwei Befehle schreiben, ohne mindestens einen Fehler zu machen. Dann schreibe ich mal das If mit ner Klammer, dann vergesse ich den Doppelpunkt am Ende, setze nen Simikolon ans Ende der Zeile... geschweifte Klammern.
Dazu kommen noch solche Sachen, dass einige Variablen für mich wie ne Liste aussehen und am Ende doch irgendetwas anderes sind und daher push pop etc nicht funktioniert.
Würde ich mir die Sprache selber beibringen, würde ich vermutlich auch noch nicht mit irgendwelchen komischen Bibliotheken arbeiten, sondern erst einmal mit den Grundlagen und mir nen entspanntes einfaches Projekt überlegen. Aber innerhalb von 2 Wochen (und ich habe genug anderes noch zu tun als 24/7 Python) will/sollte ich mich nur auf das wesentliche beschränken... So sehe ich das zumindestens.

Gruß Frokuss

PS: Daten manipulieren... Ich wollte nicht bei VW anfangen ;-)
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Frokuss: Bezogen auf das PS: Ich glaube die Umsetzung in Software war dann auch in der Steuergeräten von Bosch. 😉
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Frokuss: Das mit `__import__()` ist die einfachere Variante und bei `importlib` hast Du einen Fehler gemacht – warum willst Du da beides stehen lassen wenn das einfacherer ausreicht und das aufwändigere sogar falsch ist? 🤷
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Frokuss
User
Beiträge: 16
Registriert: Mittwoch 5. Juni 2019, 20:35

Hey, das ist eiegntlich recht einfach...

Code: Alles auswählen

datenEinlesen = __import__("daten-einlesen")#Damit kann ich zwar die py importieren
seperator = importlib.import_module("daten-einlesen", "seperator_ermitteln")#aber hiermit bekomme ich auch die Funktionen/Methoden...
Und aus dem Grund, brauche ich das zweitere - aber da ich mich nicht wirklich mit Python auskenne, werde ich einen Teufel tun und irgendetwas löschen, von dem ich mir nicht sicher bin, dass ich es wirklich nicht mehr brauche.

PS: Die __import__ ist mittlerweile gelöscht...
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Frokuss: Du lässt also das kompliziertere und falsche stehen. Dann hoff mal das der Prof sich wirklich nicht auskennt und den Fehler übersieht. 😎

Das was in den Kommentaren steht ist Unsinn – Du bekommst mit beiden nicht die Funktion sondern nur das Modul. Und über das kannst Du dann an die Funktion heran kommen. In beiden Fällen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten