Python in Datei schreiben?
Wie kann ich es machen das eine Variable von einem Python Discord Bot in ein Dokument übertragen wird also das ich z.b den code hab :
hello = 1
und jetz will ich das in hello.txt halt
hello = 1
steht oder nur 1 geht auch.
Oder noch besser das aus einer Nachricht ( Discord ) ein Eintrag in die txt Datei gemacht wird nachdem ein Befehl ausgeführt wurde
4 Antworten
myVar = 100
newFile = open("test.txt", "w")
newFile.write(str(myVar))
newFile.close()
Heißt immer wenn eine Variable Buchstaben und Zahlen enthält und ich sie in einem anderen Befehl wie z.b print nutzen möchte muss ein str davor ? Und wann benötige ich dann ein int wenn ich mit der Variable rechnen will ? Also z.b Ergebnis = A + int(B) und dann kommt wenn A = 10 und B = Q2 ist Ergebnis 12 ?
Nein, Buchstaben, bzw Zeichenfolgen wie "ABCDEFG" sind doch bereits strings.
str() bedeutet, dass du eine Zahl zu einem String umwandelst.
Aus 1 wird "1", damit kannst du dann natürlich nicht mehr rechnen.
"1"+"1" = "11"
Dir fehlen total die Basics, würde erstmal ein Grundlagen-Tutorial machen.
f = open('/path/to/file.txt','a')
f.write(hello)
f.close()
Wenn ich nur eine Datei hab wo ich das alles rein schreiben will kann ich das f = open ganz am Anfang und dann immer
if message.content.startswith(!hello)
z = message.content
y = message.author
f.write(y + ’:‘ + z)
Ich bin mir nicht sicher aber ich könnte mir vorstellen dass man jedes mal das f.open machen muss. ist aber kein Problem, weil das 'a' sagt, dass es nicht überschrieben, sondern hintendrangehängt wird. Sonst passt der Code. Bilde mir aber ein dass discord.py oder irgendeine andere Bibliothek die in der Erklärung verwendet wird ein logging-System hat, das genau das macht.
Die open-Funktion muss nur aufgerufen werden, wenn die Datei noch nicht geöffnet ist. Sie wird erst mit close wieder geschlossen.
Ok. War mir nicht sicher, da ich selbst in letzter Zeit damit gearbeitet hatte und wenn ich einmal f.read() oder f.readlines() aufgerufen hatte, war f danach leer. Somit musste ich vor jedem f.read() es erneut öffnen, oder nur einmal f.read()en und das in eine Variable speichern. Daher die Vermutung, auch f.write() würde nur einmal funktionieren.
Wenn du in die Datei schreibst und anschließend den geschriebenen Inhalt direkt wieder auslesen möchtest, musst du den Eingabestrom erst leeren (flush), denn sonst steht der neue Inhalt tatsächlich noch nicht in der Datei (der Aufruf von write allein reicht nicht). Das Schließen und Neuöffnen der Datei wäre hierbei eine mögliche Maßnahme, denn mit Schließen der Datei wird auch ein automatischer flush durchgeführt.
Bei abwechselndem Prozedere (Schreiben/Lesen) sollte es aber auch ausreichen, die Daten nebenher in einer Variable (z.B. einer Liste) zu speichern. Mit der operiert man im Programm und braucht diese nur bei Gelegenheit in die Datei schreiben.
Ok, vielen Dank! Probiere ich in meinem Programm dann mal aus!
with open ("myfile.txt","a") as fh: #Ggf. abweichender Modus
#do other stuff
if somecondition:
fh.write(f"Msg: (msg)\n")
fh.flush()
So sieht das Grundgerüst aus. Je nach genauem Anwendungszweck bieten sich weitere Möglichkeiten.
Du kannst entweder pickel verwenden oder json.
Er kann es auch in eine Txt schreiben außerdem heißt es pickle.... Und wenn eher JSON
Wenn ich nur eine Datei hab wo ich das alles rein schreiben will kann ich das newFile = open ganz am Anfang und dann immer
if message.content.startswith(!hello)
z = message.content
y = message.author
newFile.write(y + ’:‘ + z)