Text in Datei speichern(nicht write to file)

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
yeet
User
Beiträge: 6
Registriert: Freitag 17. August 2018, 19:36

Freitag 17. August 2018, 19:58

Hallo,

ich habe ein Programm programmiert, das ständig (immer wieder) durchläuft. Dabei werden Wörter einer Variable in eine Datei (im Moment noch txt Datei) geschrieben und im nächsten Programmdurchlauf mit der Variable von Wörtern verglichen. Das sieht etwa so aus:

Code: Alles auswählen

a = True

while a == True:
    l = ("Test") 
    zw = open("test.txt")
    if zw.read() != l:
        zw.close()
	zw = open("test.txt", "w")
	zw.write(l)
	zw.close()        
    else:
	zw.close()
		
    l = l + "Test"
Allerdings scheint die Methode mit den Textdateien zu langsam zu sein und außerdem verbrauchen die Dateien unnötigen Speicherplatz. Gibt es noch eine andere Methode dieses Problem zu lösen?

MfG
Benutzeravatar
pixewakb
User
Beiträge: 1136
Registriert: Sonntag 24. April 2011, 19:43

Freitag 17. August 2018, 20:16

yeet hat geschrieben:
Freitag 17. August 2018, 19:58
ich habe ein Programm programmiert, das ständig (immer wieder) durchläuft. Dabei werden Wörter einer Variable in eine Datei (im Moment noch txt Datei) geschrieben und im nächsten Programmdurchlauf mit der Variable von Wörtern verglichen. Das sieht etwa so aus [...]
Du schreibst den Inhalt der Variable in eine Datei und lädst sie dann direkt wieder von dort? Warum hältst Du die Daten nicht im Speicher? Wenn ich richtig vermute, was du eigentlich machst, dann versuchst du zu prüfen, ob der Inhalt einer Variable sich geändert hat, falls ja, würde ich in so einem Fall die neue Variable in die Prüfvariable packen und dann dagegen prüfen, also wieder, bis sich der Inhalt der neuen Variable gegenüber der Prüfvariable geändert hat. Ist verständlich, was ich meine?

Arbeit mit Dateien sieht eigentlich heute so aus:

Code: Alles auswählen

data = "Test"

with open("test.txt", "w") as f:
    f.write(data)
Benutzeravatar
__blackjack__
User
Beiträge: 1453
Registriert: Samstag 2. Juni 2018, 10:21

Freitag 17. August 2018, 20:31

@yeet: Der Vergleich von `a` mit `True` mach wenig Sinn, denn da kommt ja wieder nur `True` oder `False` heraus, also das was `a` ja bereits ist. Also ``while a:``. Da sich `a` aber nie ändert, kann man es auch weglassen und gleich ``while True:`` schreiben.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
yeet
User
Beiträge: 6
Registriert: Freitag 17. August 2018, 19:36

Freitag 17. August 2018, 20:46

pixewakb hat geschrieben:
Freitag 17. August 2018, 20:16
yeet hat geschrieben:
Freitag 17. August 2018, 19:58
ich habe ein Programm programmiert, das ständig (immer wieder) durchläuft. Dabei werden Wörter einer Variable in eine Datei (im Moment noch txt Datei) geschrieben und im nächsten Programmdurchlauf mit der Variable von Wörtern verglichen. Das sieht etwa so aus [...]
Du schreibst den Inhalt der Variable in eine Datei und lädst sie dann direkt wieder von dort? Warum hältst Du die Daten nicht im Speicher? Wenn ich richtig vermute, was du eigentlich machst, dann versuchst du zu prüfen, ob der Inhalt einer Variable sich geändert hat, falls ja, würde ich in so einem Fall die neue Variable in die Prüfvariable packen und dann dagegen prüfen, also wieder, bis sich der Inhalt der neuen Variable gegenüber der Prüfvariable geändert hat. Ist verständlich, was ich meine?

Arbeit mit Dateien sieht eigentlich heute so aus:

Code: Alles auswählen

data = "Test"

with open("test.txt", "w") as f:
    f.write(data)
@pixewabk Ja, ich verstehe genau was du meinst. Aber das was ich dann in der Variable drin stehen habe, soll in jedem weiteren Durchlauf auch noch beestehen und ich muss die Variable ja am Anfang definieren und dann wird sie ja wieder überschrieben:

Code: Alles auswählen

while True:
    l = ("Test") 
    a = (" ")
    if a != l:
       print("TEST")
       a = l
    else:
        print("Bestanden")  
Mein Ziel ist es ja, dass das Programm einmal "TEST" ausgibt und danach immer "Bestanden", also dass ein Stand immer gespeichert wird und im nächsten Programmdurchlauf auch noch gleich ist, wenn du verstehst was ich meine.
Benutzeravatar
__blackjack__
User
Beiträge: 1453
Registriert: Samstag 2. Juni 2018, 10:21

Freitag 17. August 2018, 21:03

@yeet: Beschreib doch mal welches Problem Du eigentlich lösen möchtest. Also nicht welche Lösung Du jetzt verwendest, sondern was warum gemacht werden soll.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Benutzeravatar
noisefloor
User
Beiträge: 2497
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Samstag 18. August 2018, 10:59

Hallo,
Allerdings scheint die Methode mit den Textdateien zu langsam zu sein
I/O auf der Festplatte ist immer langsam, egal wie. Abhilfe a) schneller Festplatte ;-) , b) asyncronen I/O verwenden, damit dein Hauptprogramm nicht durch I/O blockiert wird, c) das Problem anders lösen, wie oben bereits mehrfach erwähnt. c) ist hier denke aktuell denke ich die sinnvollste Lösung.

Gruß, noisefloor
Sirius3
User
Beiträge: 8637
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 18. August 2018, 11:09

@noisefloor: schnell ist relativ. Das ständige Schreiben und Lesen findet ja komplett im Cache statt. Daher dürften a) und b) nicht wirklich viel Zeit einsparen. Ich bin auch für c).
Antworten