
Replace Problemchen :)
-
- User
- Beiträge: 216
- Registriert: Mittwoch 25. August 2010, 12:26
hm ja aber das mit dem With versteh ich nicht so ganz 

@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.
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.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das heisst aber noch nicht automatisch dass es auch rueckportiert wird.EyDu hat geschrieben:@jbs: 2.7 ist auch neuer als die ersten Versionen von 3.
Daneben gibt es auch noch `contextlib.nested`
Code: Alles auswählen
with nested(open("one"), open("two") as (one, two)):
pass
Zum Erzeugen der temporaeren Datei gaebs auch noch das `tempfile` Modul.
PEP 8 waere auch noch lesenswert.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 216
- Registriert: Mittwoch 25. August 2010, 12:26
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
liebe Grüße
BlueLagoon
Schau mal unter http://www.python-forum.de/viewtopic.ph ... 78#p178478.bluelagoon hat geschrieben:hm ja aber das mit dem With versteh ich nicht so ganz
@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.
Du brauchst eben *doch* eine temporäre Datei. Schreiben und Lesen auf der gleichen Textdatei funktioniert eben so nicht.
-
- User
- Beiträge: 216
- Registriert: Mittwoch 25. August 2010, 12:26
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.
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

@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.
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.
-
- User
- Beiträge: 216
- Registriert: Mittwoch 25. August 2010, 12:26
ahh man bin ich blind lol 
+brett vorm kopf+ x.x
also so sieht die Datei aus:
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.

+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()
@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.

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.
-
- User
- Beiträge: 216
- Registriert: Mittwoch 25. August 2010, 12:26
der erste teil funktioniert mit print also das Lesen nur das Schreiben da ist meine Datei immer leer.
@bluelagoon: Dann machst Du irgendetwas falsch. *Was* kann man ohne Quelltext schlecht sagen.
-
- User
- Beiträge: 216
- Registriert: Mittwoch 25. August 2010, 12:26
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()

lg euer bluelagoon
-
- User
- Beiträge: 216
- Registriert: Mittwoch 25. August 2010, 12:26
ups ja stimmt werd ich machen Danke 
