Von dem Edit von oben in eine neue Antwort kopiert:
Ich sehe hier vor allem als Problem, dass du mehrere Objekte erstellst, die allerdings alle im Endeffekt auf die gleiche Datei zugreifen. Das ist doch ziemlich unlogisch. Wenn ich hier mit Klassen arbeiten würde, würde ich je ein Objekt für eine Datei verwenden, d.h. dass z.B. x auf die Datei „test.txt“ zugreift und y auf „hallo.txt“. Außerdem würde ich es umgekehrt machen, dass du den Dateinamen an __init__() übergibst und so das Dateiobjekt öffnest. An die Funktion write_sth() würde ich dann den Text, den du speichern möchtest, übergeben.
So würdest du also zuerst eine Datei öffnen, indem du das Objekt erstellst. Danach kannst du so lange etwas hineinschreiben, wie du möchtest. Anschließend müsstest du allerdings die Datei manuell wieder schließen.
Im Grunde wäre das aber nichts anderes als das, was die open()-Funktion schon macht. Das einzige, was dein Programm hier besonders macht ist das multiplizieren der Buchstaben, aber das würde ich doch eher in einer einfachen Funktion verwenden:
Code: Alles auswählen
def multipliziere_buchstabe(buchstabe, faktor):
return buchstabe * faktor + "\n"
with open("test.txt", "w") as datei:
datei.write(multipliziere_buchstabe("x", 4))
datei.write(multipliziere_buchstabe("y", 10))
So hätte ich dein Programm gemacht. Als Ergebnis bekommt man dann:
Neuer Text:
Ja, damit schließt sich die Datei wieder wenn man den Block (also die Einrückung) verlassen hat. Ist immer sinnvoll. So genau weiß ich das auch nicht, aber ich würde es als sinnvoll sehen, erst einmal die Daten aufzubereiten und anschließend kurz in die Datei zu speichern. Aber das sollte eher jemand fachkundigeres sagen.
Hm, naja, aber auch zum Üben fand ich die Klasse etwas falsch gedacht, also schon vom Konzept her. Aber so wirklich gut bin ich da auch nicht drin
Zum „w“: Naja, da steht truncating. Ehrlich gesagt weiß ich aber auch nicht genau, was das jetzt heißt, wird aber wohl genau der Effekt sein, den du meinst. Bzw. das kann auch an dem fehlenden Schließen der Datei liegen.
Zu deinem letzten Absatz: Naja, das Problem ist, dass du die Datei bei jedem Schreibversuch neu öffnest (und sie vorher nicht schließt!). Entweder sammelst du die Sachen erst und schreibst sie dann alle auf einmal, oder du öffnest die Datei, schreibst alles nacheinander hinein und schließt sie dann ordnungsgemäß wieder (und dann ist das Programm beendet).