Seite 2 von 2
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:54
von bluelagoon
hm ja aber das mit dem With versteh ich nicht so ganz

Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:55
von BlackJack
@bluelagoon: Wenn Du eine Datei mit '+' zum schreiben öffnest steht der Dateizeiger auf dem Anfang der Datei. Da wird dann auch jede Zeile mit Deinen Ersetzungen hingeschrieben und überschreibt was auch immer da steht.
Auf ein und der selben Datei gleichzeitig lesend und schreibend zugreifen, sollte man nur machen, wenn man weiss was man da tut. In der Regel geht das nur bei Binärdateien gut -- bei Textdateien sollte man das sein lassen.
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 12:58
von bluelagoon
ok also + raus

Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 13:00
von cofi
EyDu hat geschrieben:@jbs: 2.7 ist auch neuer als die ersten Versionen von 3.
Das heisst aber noch nicht automatisch dass es auch rueckportiert wird.
Daneben gibt es auch noch `contextlib.nested`
Code: Alles auswählen
with nested(open("one"), open("two") as (one, two)):
pass
Der Grund fuer `with` ist, dass es die Dateien nach dem Block wieder aufraeumt und du dich nicht darum kuemmern musst.
Zum Erzeugen der temporaeren Datei gaebs auch noch das `tempfile` Modul.
PEP 8 waere auch noch lesenswert.
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 13:03
von bluelagoon
naja ich brauch eig keine Temporäre Datei ich wollt einfach nur bissl Doku Üben und irgendwie häng ich voll weil unter print schreibt er das was ich will aber wenn ich in Datei schreiben will dann is die Datei leer (gut das ich Kopie von datei hab die ganzen 20 Zeilen nochmal Tippen wär eine Qual ^^)
liebe Grüße
BlueLagoon
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 13:04
von /me
bluelagoon hat geschrieben:hm ja aber das mit dem With versteh ich nicht so ganz

Schau mal unter
http://www.python-forum.de/viewtopic.ph ... 78#p178478.
Re: Replace Problemchen :)
Verfasst: Donnerstag 26. August 2010, 13:06
von BlackJack
@bluelagoon: Nein, nicht '+' raus. Dann wird die Datei wenn sie zum Schreiben geöffnet wird komplett geleert und die äussere Schleife hat keine Zeilen mehr zum Lesen.
Du brauchst eben *doch* eine temporäre Datei. Schreiben und Lesen auf der gleichen Textdatei funktioniert eben so nicht.
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 07:27
von bluelagoon
was gebt ihr ein das der Code so Farbig wird?
naja ich habs mit with probiert aber ich will nur einen Buchstaben austauschen und replace nimmt er nicht an.
Traceback (most recent call last):
File "geschichten.py", line 11, in <module>
f=f.replace("X","Y")
AttributeError: 'file' object has no attribute 'replace'
ich weis langsam nicht mehr weiter

gibts überhaupt replace in python oder heisst die funktion vll anders? ich hab zwar replace bei google gefunden aber vielleicht gibts ne bessere Methode.
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 07:33
von BlackJack
@bluelagoon: Es gibt über dem Textfeld eine Schaltfläche wo `python` draufsteht. Die fügt das ein, womit man Python-Quelltexte hier farbig machen kann.
Alternativ kann man bei den Code-Tags beim öffnenden Tag aus dem code ein code=python machen.
`replace()` gibt es auf Zeichenketten. Du versuchst das auf einem Dateiobjekt. Du musst den Inhalt schon einlesen um den Buchstaben austauschen zu können.
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 07:35
von bluelagoon
ahh man bin ich blind lol
+brett vorm kopf+ x.x
also so sieht die Datei aus:
Code: Alles auswählen
L = 4
if L == 4 :
with open("geschichten","r") as f:
print f.read()
with open("geschichten","w")as f:
f=f.replace("X","Y")
print f.read()
f.close()
so: ich habs auch schon andersrum probiert spricht write oben read unten aber er hat einfach dieses problemchen mit replace langsam denk ich ich bin einfach nur blöd das zu verstehn.
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 08:15
von BlackJack
@bluelagoon: Wie oft wurde Dir denn nun eigentlich schon gesagt, dass Du nicht die selbe Textdatei gleichzeitig zum Lesen und Schreiben öffnen sollst!?

Beide Dateiobjekte an den gleichen Namen zu binden ist selbst wenn das gehen würde, nicht so schön. Und das Schliessen der Datei übernimmt das ``with``, das braucht man also nicht selber zu machen.
Die `read()`-Methode liest den Dateiinhalt ein. Wenn Du damit etwas machen möchtest, solltest Du ihn vielleicht an einen Namen binden. Und lesen kann man nur von Dateien, die auch zum Lesen geöffnet wurden.
Hör doch mal auf die Ratschläge und gehe ein wenig systematischer an die Sache heran. Teile das Problem in kleine Teilprobleme auf und löse diese.
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 08:26
von bluelagoon
der erste teil funktioniert mit print also das Lesen nur das Schreiben da ist meine Datei immer leer.
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 08:47
von BlackJack
@bluelagoon: Dann machst Du irgendetwas falsch. *Was* kann man ohne Quelltext schlecht sagen.
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 09:09
von bluelagoon
Code: Alles auswählen
if L == 4 :
o=open("geschichten.txt","w+")
for line in open("Märchen.txt"):
line=line.replace ("X","Y")
o.write(line)
print line
o.close()
und siehe da es klappt

danke ihr lieben
lg euer bluelagoon
Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 09:11
von EyDu
Jetzt fehlt nur noch das with-Statement, auf welches du etwas 27 hingewiesen wurdest. Dann werden auch alle Dateien korrekt geschlossen

Re: Replace Problemchen :)
Verfasst: Freitag 27. August 2010, 09:14
von bluelagoon
ups ja stimmt werd ich machen Danke
