Seite 1 von 1

[Anfänger] Verständnisfrage

Verfasst: Dienstag 28. August 2018, 01:17
von Kael
Ja - ich hab da mal ne Frage!

Vielleicht liegt es grade aber auch einfach an der Uhrzeit, bin schon den ganzen Tag an einem kleinen Programm am arbeiten...

Und zwar geht es um die os bibliothek.
Die Tutorials und auch das Buch geben irgendwie, für mich, keine aufschlussreiche antwort.

Auf der einen Seite wird etwas mit open(dateiweg), dann wieder ohne dateiweg und dann teilweise mit einer variable davor geschrieben...

Hat vielleicht jemand die Muße mir zu erklären wie das genau funktioniert?

Weil wenn ich:

ds = open(PATH, 'w')
datei.open()
open(), text

lese bin ich auf dauer irgendwie verwirrt was denn nun irgendwie richtig ist ohne das ich bei den einzelnen Dingen schon einige Fehler mache. Damit ich auch mal genau weiß was/wie das dort gemeint ist.

Bei einigen soll z.B. ein Dateipfad angegeben werden ,bei anderen wiederrum nicht.

Woran ich gerade ein wenig bastel ist ein Programm was Graphen erstellt und diese dann in einer datei gespeichert werden sollen. Dort soll auch geprüft werden, wenn die Datei gespeichert wird, ob die Datei schon vorhanden ist und wenn ja soll der Speichervorgang abgebrochen werden.
Das gleiche ist dann aber auch beim Programm lesen und 'auswerten' dran.

Re: [Anfänger] Verständnisfrage

Verfasst: Dienstag 28. August 2018, 06:55
von Sirius3
@Kael: die Fragmente die Du zeigst, sind zu kurz, um das wirklich erklären zu können. Mit der Bibliothek `os` hat das alles nichts zu tun, weil `os` nur ein `open` bereitstellt, das ganz low-level dem entspricht, was das Betriebssystem bereitstellt, und was selten und nur für spezielle Aufgaben benutzt wird. Ansonsten ist `open` eine ganz normaler Name, der in verschiedenen Kontexten für alles mögliche stehen kann.

Das `open` im __builtins__-Modul öffnet Dateien, wie wahrscheinlich in der ersten Zeile dargestellt, wobei man hier das with-Statement benutzen sollte:

Code: Alles auswählen

with open(PATH, 'w') as output:
    output.write(something)
Bei der zweiten Zeile handelt es sich um irgendeine Instanz, die eine Methode `open` hat und keinen Rückgabewert. Diese Instanz repräsentiert wahrscheinlich irgendetwas, das sich öffnen läßt, und mit dem man dann weiterarbeiten kann. Ohne zu wissen, was das für eine Instanz ist, läßt sich da aber nichts sagen.
Die dritte Zeile macht ohne mehr zu wissen, keinen Sinn.

Re: [Anfänger] Verständnisfrage

Verfasst: Dienstag 28. August 2018, 13:52
von Kael
Nun, ich würde gern wissen was man braucht. Ich habe 3 verschiedene Schreibvariationen hingesetzt die alle in irgendwelchen Büchern und online Tutorials geschrieben werden.
Aber nirgends wird erklärt was nun was bedeutet.
Muss man das "PATH" ersetzen? Muss ich was vor das open schreiben?
Warum wurde bei einigen eine variable davor gesetzt?

Code: Alles auswählen

def savedata():
    global dateiname
    dateiname = save_ent.get()
    exist = True
    if os.path.exists(dateiname) == True:
        error()
    else:
        dateiname = open(../Abschlussprojekt, dateiname)
Mal eine Funktion weswegen ich frage und ich, einfach weil ich gefühlt drölftausend verschiedene 'Schreibweisen' sehe nicht wirklich zurecht komme WAS denn nun wirklich irgendwo reinkommt.

Re: [Anfänger] Verständnisfrage

Verfasst: Dienstag 28. August 2018, 14:10
von __deets__
Wo siehst du denn diese droefltausend Schreibweisen? Hast du mal in die offizielle Dokumentation und das dazugehoerige Tutorial geschaut? Da wird das alles erklaert. https://docs.python.org/3.7/tutorial/inputoutput.html

Re: [Anfänger] Verständnisfrage

Verfasst: Dienstag 28. August 2018, 14:19
von Kael
https://docs.python.org/3.7/tutorial/in ... ting-files

Code: Alles auswählen

>>> f = open('workfile', 'w')
Warum wird das open() denn in einen string noch zusätzlich verpackt?

Also ich packe es in einen string um dann einen weiteren string zu erzeugen?

Re: [Anfänger] Verständnisfrage

Verfasst: Dienstag 28. August 2018, 14:20
von Sirius3
@Kael: was eine Variable ist und was ein literaler String und was eine Funktion ist und wie man sie benutzt, steht halt ganz am Anfang von jedem Tutorial und nicht erst, wenn es um Dateiverarbeitung geht. Wenn Dir das noch nicht ganz klar ist, mußt Du wohl oder übel ein paar Schritte zurückgehen.

Re: [Anfänger] Verständnisfrage

Verfasst: Dienstag 28. August 2018, 16:47
von __blackjack__
@Kael: Bemerkung am Rande: Vergiss am besten gleich wieder das es ``global`` gibt. Der Code sieht nach GUI-Code aus: Da kommt man in der Regel nicht um objektorientierte Programmierung herum.

`exist` wird in der Funktion definiert, dann aber nicht verwendet — kann also weg.

Vergleiche mit literalen `True`- oder `False`-Werten sind in aller Regel redundant. `os.path.exists()` gibt ja schon `True` oder `False` zurück. Der Vergleich mit ``== True`` ergibt wieder den Wert den man eh schon als Rückgabewert bekommen hat. Das macht also keinen Sinn. Ein ``if os.path.exists(dateiname):`` reicht da aus.

Bei der letzten Zeile spuckt der Compiler einen `SyntaxError` aus. Das kann also nicht richtig sein. `open()` gibt auch keinen Dateinamen als Ergebnis zurück, der Name an den Du das Ergebnis zuweist ist also falsch, da irreführend. Ausserdem wird der Name davor ja anscheinend tatsächlich für einen Dateinamen/Pfad verwendet. Ein Name sollte in einer Funktion/Methode nicht für verschiedene Dinge verwendet werden, das verwirrt den Leser.