inhalt einer *.txt datei

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
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

hi @

kleines problem. erstmal der code:

Code: Alles auswählen

status = open('status.txt','a')
status.write('1')
while status == '1':
	mach iwas
ich möchte halt, dass wenn der inhalt der status.txt == 1 ist iwas macht! aber da tut sich nix! hättet ihr eine lösung? wäre euch sehr dankbar!

mfg
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

cyp++ hat geschrieben:aber da tut sich nix!
Hallo cyp++!

Ich biete dir erst mal ein wenig Lesestoff: http://www.python-forum.de/topic-6157.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cyp++ hat geschrieben:ich möchte halt, dass wenn der inhalt der status.txt == 1 ist iwas macht! aber da tut sich nix! hättet ihr eine lösung? wäre euch sehr dankbar!

Code: Alles auswählen

f = file('status.txt', 'r')
content = f.read()
f.close()
if content == '1\n':
    print 'Mache nun iwas (oder Plätzchen)'
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

funktioniert leider auch nicht richtig
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cyp++ hat geschrieben:funktioniert leider auch nicht richtig
Dann liegt das daran, dass deine Datei nicht als einzigen Inhalt eine 1 mit einem Zeilenumbruch enthält sondern irgendetwas anderes.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

Code: Alles auswählen

status = open('status.txt', 'a')
status.write('1\n')
lol = status.read()
if lol == '1\n':
	print 'lol'
er gibt mir kein lol aus!
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

a) 'status' ist kein guter Bezeichner für ein Filehandle. 'f' oder 'fh' sind üblich.
b) Du musst die Datei schon zum Lesen und nicht zum Anhängen öffnen, d.h. open() muss als zweiten Parameter 'r' und nicht 'a' erhalten.
c) Beides zeigt das Beispiel von Leonidas bereits.

Update: Hab mich leicht verschaut, sorry. Du schreibst richtig in die Datei, allerdings solltest du diese wieder schließen (f.close()) und dann erneut öffnen, aber zum Lesen (s. Beispiel von Leonidas). Man kann die Datei auch zum Lesen und Schreiben zugleich öffnen, allerdings musst du dann nach dem Schreiben wieder "zurückspulen".

Bedenke auch, dass du bei mehrmaligem Ausführen des Codes immer wieder an die Datei anhängst, also dort "1\n1\n1\n"[...] enthalten sein kann. Um das zu umgehen, kannst du entweder die Datei immer komplett überschreiben ('w' statt 'a') oder zeilenweise lesen und nur die erste Zeile auswerten. Da es dir scheinbar nur um eine 1 oder (vermutlich) eine 0 in der Datei geht, kannst du den Zeilenumbruch auch ganz weglassen. Das 'b' habe ich auf Empfehlung der Dokumentation angehängt ("Appending 'b' is useful even on systems that don't treat binary and text files differently, where it serves as documentation.").

Code: Alles auswählen

# Datei neu schreiben
f = open('status.txt', 'wb')
f.write('1')
f.close()

# Datei einlesen
f = open('status.txt', 'rb')
line = f.readline()
f.close()

# auswerten
if line == '1':
    print ':)'
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

danke, das klappt jetzt'! :)
Antworten