Seite 1 von 2
Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 09:58
von bluelagoon
Wunderschönen Guten Morgen,
bin hier Neu im Forum

Hab auch schon ne Dokumentation gelesen, aber ich habe ein Problem mit dem Replace. In meiner Datei steht ein Buchstabe mit X diesen will ich austauschen mit zum Beispiel Y leider Funktioniert es nicht so wie ich will.
Code: Alles auswählen
L = 4
if L == 4 :
o = open ("Geschichte.txt", "w+")
for line in open ("Geschichte.txt") :
line = line.replace ( "X" , "Y" )
o.write(line)
o.close()
else:
print "Fehler"
Liebe Grüße
euer Bluelagoon
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:03
von .robert
Moin!
also, etwas ´funktioniert nicht so wie du willst` ist natürlich blöde, aber eine genauere Fehlermeldung ist immer gut. Am besten einfach die Fehlermeldung hier rein kopieren, die beim Ausführen kommt (und bei diesem Code kommen Fehlermeldungen!).
Ist das wirklich dein Code? Das erste Problem werden die Einrückungen sein. Dann schau dir mal das `with`-Statement an. Dann sehen wir weiter...

Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:07
von bluelagoon
mh ich weis nicht warum aber die Einrückungen hier sind anders angezeigt als in meiner Datei.
Fehler kommt keiner in der Datei stehn 2 Zeilen und wenn ich es ausführe werden Beide Zeilen gelöscht. Naja dann werde ich mich mal nach With umsehen
Grüße
Bluelagoon
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:10
von jbs
Es ist zumindest mutig eine Datei einmal zum schreiben und zum schreiben zu öffnen.
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:11
von .robert
Guck dir noch mal den Parameter zum öffnen der Datei an:
http://docs.python.org/tutorial/inputou ... ting-files
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:19
von BlackJack
Und dann vielleicht noch den Style Guide (PEP 8), was die Formatierung des Quelltextes angeht. Einrückung sollte zum Beispiel mit vier Leerzeichen pro Ebene passieren. Möglichst nicht mit Tabs.
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:20
von bluelagoon
Ah jetz hab ich den Fehler gefunden Vielen Lieben Dank
Code: Alles auswählen
L = 4
if L == 4 :
o=open("geschichte.txt","r")
for line in open("geschichte.txt"):
line = line.replace ("X","5")
o.close()
print line
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:21
von BlackJack
@bluelagoon: Das ist schon wieder falsch eingerückt. Und ob das `close()` an der richtigen Stelle steht…
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:22
von bluelagoon
es ist nur hier falsch keine Ahnung wie das hier geht. Auf jedenfall in Python Funktioniert es.
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:41
von jbs
Ungetestet:
Code: Alles auswählen
from shutil import move
origin = 'foo.txt'
with open(origin) as f_in, open(origin+'.tmp','w') as f_out:
for line in f_in:
f_out.write(line.replace('X','Y'))
move(origin+'.tmp', origin)
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 10:50
von bluelagoon
Danke für deinen Code aber da kommt bei mir folgendes:
Code: Alles auswählen
File "geschichten.py", line 11
with open(origin) as f_in open(origin+'.tmp','w') as f_out:
^
SyntaxError: invalid syntax
Immerhin er hat meinen Befehl ausgeführt ich hab in der Datei aber nun immer diese Neue Zeile stehn. Gibt es einen Befehl die Vorherige Zeile zu Löschen?
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 11:23
von EyDu
Mensch, wie wichtig doch manchmal so ein kleines Komma sein kann

Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 11:26
von bluelagoon
wenn ich das Komma schreib zeigt er das das nicht passt

Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 11:29
von bluelagoon
Code: Alles auswählen
File "geschichten.py", line 11
with open(origin) as f_in, open(origin+'.tmp','w') as f_out:
^
SyntaxError: invalid syntax
Sorry das verschiebt es hier so.. das steht unterm Komma..
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 11:31
von bluelagoon
Also wenn ich Print ausgebe passt das

kann ich vll print mit stdout oder so umleiten? dann wäre ich Vollkommen mit meinem Test zufrieden

Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:24
von EyDu
Ok, dann benutz du wahrscheinlich kein Python 3. Dann kannst du with with-Statements einfach in einander verschachteln:
Code: Alles auswählen
with open("spam") as spam:
with open("eggs" as eggs:
...
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:34
von jbs
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:40
von bluelagoon
Code: Alles auswählen
L = 4
if L == 4 :
for line in open("geschichten.txt"):
o=open("geschichten.txt","r+w")
lini = line.replace ("X","5")
o.write(lini)
o.close()
so siehts inzwischen bei mir aus und er schneidet mir einfach n paar Buchstaben weg

Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:46
von EyDu
@jbs: 2.7 ist auch neuer als die ersten Versionen von 3.
@bluelagoon: Du kannst hier nicht in die Datei schreiben und gleichzeitig daraus lesen. Entweder liest du alle Zeilen vor dem Schreiben ein oder du erzeugst eine temporäre Datei. Das ständige Öffenen und Schließen von Dateien ist außerdem nicht besonders performat. Und benutze doch bitte Python-Code-Tags.
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:52
von /me
bluelagoon hat geschrieben:Code: Alles auswählen
L = 4
if L == 4 :
for line in open("geschichten.txt"):
o=open("geschichten.txt","r+w")
lini = line.replace ("X","5")
o.write(lini)
o.close()
Bitte benutze für Python-Code hier im Forum Python-Tags, statt Code-Tags.
Hast du eigentlich die Antworten auf deine Frage gelesen
und verstanden? Du versuchst hier immer noch eine Datei zweimal zu öffnen und zwar einmal zum Lesen und einmal zum Lesen und Schreiben. Außerdem ist es nicht erforderlich, die zum Schreiben benutzte Datei für jede Zeile in der Quelldatei einmal zu öffnen und wieder zu schließen.
Der Weg sollte so sein, wie in den Antworten gezeigt:
1: Quelldatei öffnen - und zwar vorzugsweise unter Verwendung von
with, denn damit wird sie am Ende des with-Blocks automatisch geschlossen.
2: Zieldatei öffnen - auch hier sollte
with verwendet werden.
3. Alle Zeilen der Quelldatei durchgehen
3.1: Ggf. Text ändern
3.2: In Zieldatei schreiben
Zum Schluss kannst du dann noch die Quelldatei wegräumen und der Zieldatei den Namen der Quelldatei geben.