oeffnen und modifizieren von files mit write

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
newbie25946
User
Beiträge: 8
Registriert: Montag 9. Juli 2007, 22:39

Montag 9. Juli 2007, 23:04

moin,
habe eine textdatei beispiel_write.txt mit

A
B
C

an deren zeilen ich jeweils gerne etwas anhängen wollte. habe verschiedene moeglichkeiten probiert - die alle nicht klappen... vielleicht kann mir jemand helfen, habe offensichtlich ein ziemliches brett vorm kopf. geschrieben habe ich

Code: Alles auswählen

#!/usr/bin/python

f = file('beispiel_write.txt', 'r+')
for line in f.readline():
	if line.startswith('A'):
		line = line[:-1] + '_test\n'
		f.write(line)
	elif line.startswith('B'):
		line = line.replace('\n', '_test\n')
		f.write(line)
		print 'hello'
	elif line == 0:
		break
und haette gerne als ergebnis

A_test
B_test
C

bekomme aber leider :(

A
A_test

verstehe nicht, warum 'elif' offensichtlich ueberhaupt nicht ausgefuehrt wird und A dafuer doppelt...
waere super, wenn mir jemand weiterhilft!

newbie25946
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Montag 9. Juli 2007, 23:58

Das readline kannst du dir sparen:
for line in f reicht.
Und zum elif, auch das kannst du weglassen. For bricht ab sobald alle Zeilen durch sind.

Gruss,
Jonas

PS: Irgend wie stinkts hier so nach Hausaufgaben :)
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Dienstag 10. Juli 2007, 07:23

Hallo newbie25946 und Willkommen ;)
newbie25946 hat geschrieben:bekomme aber leider :(

A
A_test
Das liegt daran das du die Datei mit r+ öffnest, was soviel bedeutet wie: "öffnen und weiteren Inhalt anhängen".

Es gibt unter anderem 2 Lösungswege:
  1. Datei A lesend öffnen mode="r"
  2. den Inhalt zwischenspeichern
  3. Datei A schließen
  4. zwischengespeicherten Inhalt ändern.
  5. Datei A wieder öffnen (diesmale schreibend mode="w")
  6. geänderten Inhalt abspeichern
  7. Datei A schließen
oder (Sicherer, weil Quelldatei unangetastet bleibt)
  1. Datei A lesend öffnen mode="r"
  2. Datei B öffnen (schreibend mode="w")
  3. Inhalt von A einlesen, ändern und in B speichern
  4. Datei A schließen
  5. Datei B schließen
Viel erfolg ;)
newbie25946
User
Beiträge: 8
Registriert: Montag 9. Juli 2007, 22:39

Dienstag 10. Juli 2007, 22:58

vielen dank fuer die hints - klappt wunderbar! :D

aus neugier: verstehst du in ansatz 1 unter folgende methode

Code: Alles auswählen

#!/usr/bin/python

f = file('beispiel_write.txt')
lines = f.readlines()
f.close() 

h = file('ansatz_1.txt', 'w')
for i in lines:
	i = i.replace('\n', '_test\n')
	h.write(i)
h.close()
oder an welche art 'zwischenspeichern' dachtest du?

gruß newbie25946

ps dank auch fuer den stilistischen wink an jonas - hausaufgaben riechen allerdings anders :roll:
BlackJack

Dienstag 10. Juli 2007, 23:07

Das war mit zwischenspeichern gemeint. Aber wenn die Zieldatei eine andere ist, ist das ja nicht notwendig. Das muss man nur machen, wenn das Ergebnis wieder in die selbe Datei gespeichert werden soll.
newbie25946
User
Beiträge: 8
Registriert: Montag 9. Juli 2007, 22:39

Dienstag 10. Juli 2007, 23:17

stimmt, ging ja um mehr sicherheit bei unterschiedlichen dateien...
ist es denn tatsaechlich so unsicher, die gleiche datei zu verwenden?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Dienstag 10. Juli 2007, 23:42

Wenn man weiß was man tut nicht, aber wenn man nur eine Datei und nichtmal ne Sicherheitskopie hat und der Versuch diese zu maniplulieren mißlingt... das kommt irgendwie schlecht ;)

Es kommt auf den Anwendungsfall an, was man machen will.
Ob man es halt möchte das die Originaldatei ersetzt wird usw.
newbie25946
User
Beiträge: 8
Registriert: Montag 9. Juli 2007, 22:39

Mittwoch 11. Juli 2007, 00:10

na, dann vielleicht besser auf nummer sicher..
jedenfalls danke fuer konstruktive ratschlaege/ spontanes antworten!
habe sicher mal wieder eine frage ans forum :!:

newbie25946
Antworten