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.
[Anfänger] Verständnisfrage
@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:
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.
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)
Die dritte Zeile macht ohne mehr zu wissen, keinen Sinn.
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?
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.
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)
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
https://docs.python.org/3.7/tutorial/in ... ting-files
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?
Code: Alles auswählen
>>> f = open('workfile', 'w')
Also ich packe es in einen string um dann einen weiteren string zu erzeugen?
@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.
- __blackjack__
- User
- Beiträge: 14033
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
`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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.