Python schrieb und bearbeiten con .txt Dateien

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
-Passi-
User
Beiträge: 17
Registriert: Mittwoch 11. November 2020, 23:12

Hi,
ich will bei meinem Spiel eine art Highscoreliste einbauen. Dafür werden alle Benutzer mit deren "Daten" nach einem gleichem Schema in eine .txt Datei eingetragen:

Schema:
Name//Level//Highscore
Beispiel:
Max Mustermann//2//46

Das ich das aus meiner Datei rausziehe, zerlege, bearbeite und wieder Zusammensetze funktioniert auch schon ABER (<- Ohne ein aber wäre es zu schön :D) Wie kann ich meinem Programm sagen das er wenn er sich den input aus Ziele x geholt hat, das dann auch in Zeile x reinschreibt? Bis jetzt hängt er es entweder hintenan oder überschreibt die erste Zeile... Er soll aber nur die vorher aufgerufene Zeile überschreiben.

beispiel:
Max Mustermann//2//46
Max Mustermann//2//46
Max Mustermann//2//46
Max Mustermann//2//46
Meier//2//36
Max Mustermann//2//46

Ich schaffe es die Zeile mit Meier rauszuziehen, aber weiß nicht wie ich die neue Version dann an genau der Stelle wieder einsetze

Vielen Dank im Voraus
Mit freundlichen Grüßen
Passi
Benutzeravatar
__blackjack__
User
Beiträge: 14020
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@-Passi-: Das geht nicht. Textdateien muss man in solchen Fällen komplett neu schreiben, mit dem gesamten Inhalt.

Warum verwendest Du so einen ungewöhnlichen Trenner? Warum nicht eine CSV-Datei? Oder vielleicht noch besser eine JSON-Datei, da bleiben dann die Zahlen auch gleich als Zahlen erhalten.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
-Passi-
User
Beiträge: 17
Registriert: Mittwoch 11. November 2020, 23:12

schade, dass das nicht so geht.

Das war die schnellste mir bekannte Möglichkeit das alles in einer Zeile abzuspeichern. Wenn das mit dem Einfügen Wieder geklappt hätte, wäre ja alles perfekt...

Habe mich mit CSV-Dateien noch garnicht auseinander gesetzt.

Das ganze Projekt läuft halt nur im Rahmen einer Klausurersatzleistung, welche sich eigentlich auf Python, Tkinter und .txt detein beschränken soll.


Dann andere frage lässt sich dann einfach die gewünschte Zeile entfernen und nach Bearbeitung hinten anfügen, ohne das leere Zeilen überbleiben? Das würde das ganze ja eigentlich auch Lösen.
Benutzeravatar
__blackjack__
User
Beiträge: 14020
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@-Passi-: Löse Dich von der Idee da in der *Datei* irgendetwas mit Zeilen machen zu wollen. Du wirst für Änderungen die Datei in eine passende Datenstruktur einlesen, an der Datenstruktur im *Speicher* die Veränderungen vornehmen, und dann die Daten *alle* wieder in die Datei schreiben müssen.

Und nur zur Sicherheit weil Du etwas von „erste Zeile überschreiben“ geschrieben hast: Irgendein Dateimodus in dem ein "+" vorkommt ist *falsch*. Einlesen der alten Daten und (über)schreiben der Daten sind zwei getrennte Operationen für die jeweils die Datei geöffnet und danach wieder geschlossen wird.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
-Passi-
User
Beiträge: 17
Registriert: Mittwoch 11. November 2020, 23:12

Ja okay Danke für die Hilfe, aber ich habe es jetzt doch so gemacht, wie ich mir das erst gedacht habe und das Funktioniert einwandfrei.

Für das nächste Projekt nehme ich mir das dann aber eher so zu Herzen, das jetzt noch umzubauen wäre etwas zu knapp geworden.

Vielen Dank für die Hilfe
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Was heißt denn "wie ich es mir gedacht habe"?

Mein Name ist übrigens sp//arr//ow. Ich möchte auch in deine Highscore.
Sirius3
User
Beiträge: 18261
Registriert: Sonntag 21. Oktober 2012, 17:20

@-Passi-: da es so, wie Du es Dir gedacht hast, nicht funktionieren kann, würde mich Deine Lösung schon interessieren. Zeig doch den Code.
Antworten