Seite 1 von 1

buchstabe durch einen anderen ersetzen (anfängerfrage)

Verfasst: Montag 17. September 2007, 14:49
von Teabag
Hi leuts
Ich will in einer textdatei ein Buchstabe durch einen anderen ersetzen lassen.
z.B. wenn in der Textdatei 25 mal ein a drin ist soll jedes a zu einem b umgeschrieben werden. dazu hatte ich mir das überlegt:

Code: Alles auswählen

# -*- coding: cp1252 -*-
def ersetzer (zeile):
    text = ''
    for i in range( len(zeile) ):
        if zeile[i] == 'a':
            text = text + 'f'
        else:
            text = text + zeile[i]
    return text

# ausprobieren:
datei = open("text.txt", "w")
testzeile = datei.readlines()
print testzeile
print
print sonderzeichen(testzeile)
datei.write(sonderzeichen(testzeile))

ersetzer()
Doch da kommt immer ein Error :
[Errno 9] Bad file descriptor
???
warum bad file descriptor?
vieleicht könnt ihr mir ja helfen.
Schon mal vielen Dank

Gruß Teabag

Verfasst: Montag 17. September 2007, 15:35
von Rebecca
Der bad filedescriptor bedeutet, dass du die Datei zum schreiben oeffnest, aber lesen willst (oder umgekehrt). Das 'w' bei open sollte in deinem Fall ein 'wr' sein. Uebrigens ist es meist keine gute Idee, in eine Datei gleichzeitig zu schreiben und davon zu lesen, da die Position, wo man sich in der Datei befindet, bei beiden Operationen geaendert wird und es ein Kuddelmuddel geben kann.

Und kennst du schon replace?

Code: Alles auswählen

>>> "asdfasdfasdf".replace("a", "!")
'!sdf!sdf!sdf'

Verfasst: Montag 17. September 2007, 15:38
von Teabag
aber der error bezieht sich auf was anderes!:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Raphael1\Desktop\hm.py", line 13, in <module>
testzeile = datei.readlines()
IOError: [Errno 9] Bad file descriptor

Schon mal danke für die antwort

Gruß Teabag

Verfasst: Montag 17. September 2007, 15:42
von gerold
Hallo Teabag!

Vielleicht solltest du dir kurz die Zeit nehmen um das hier durchzulesen: http://www.python-forum.de/topic-6157.html

Wenn du dann noch fragen hast -- einfach melden. :-)

mfg
Gerold
:-)

Verfasst: Montag 17. September 2007, 15:45
von Rebecca
Teabag hat geschrieben:aber der error bezieht sich auf was anderes!:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Raphael1\Desktop\hm.py", line 13, in <module>
testzeile = datei.readlines()
IOError: [Errno 9] Bad file descriptor
Nein, das ist genau das, was ich meine. Du versuchst mit readlines von einer Datei zu lesen, die du nur zum Schreiben geoeffnet hast.

Verfasst: Montag 17. September 2007, 15:56
von Teabag
hi
wenn ich das jetzt mit replace versuche so:

Code: Alles auswählen

datei = open("text.txt", "wr")
testzeile = datei.readlines()
teszeilen.replace("a", "f")
dann kommt zum einem immer noch file descriptor error und wenn ich nur r statt wr nehme kommt:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Raphael1\Desktop\hm.py", line 14, in <module>
testzeile.replace("a", "f")
AttributeError: 'list' object has no attribute 'replace'
kann man das bei so was nicht machen? (ich meine das replace) ?
Aber danke für die antworten ;-)

Gruß Teabag

Verfasst: Montag 17. September 2007, 16:00
von Rebecca
Upps, es muss 'w+' heisse. :oops:

readlines liefert dir eine Liste zurueck, replace gibt es nur auf strings. Du kannst z.B. die ganze Textdatei mit read() einlesen, oder du muss replace auf jede Zeile einzeln anwenden.

Verfasst: Montag 17. September 2007, 16:06
von Teabag
Achso ok, np
Doch ich habe jetzt das:

Code: Alles auswählen

# -*- coding: cp1252 -*-
def ersetzer (zeile):
    text = ''
    for i in range( len(zeile) ):
        if zeile[i] == 'a':
            text = text + 'f'
        else:
            text = text + zeile[i]
    return text

# ausprobieren:
datei = open("text.txt", "w+")
testzeile = datei.readlines()
datei.write(ersetzer(testzeile))
es kommt kein error mehr, doch in der textdatei steht hinterher einfach gar ncihts mehr ???

Gruß Teabag

Verfasst: Montag 17. September 2007, 16:18
von CM
Den entscheidenen Tipp hat Dir Rebecca ganz am Anfang gegeben: Öffne zwei Dateien: Eine zum Lesen und eine zum Schreiben. Wenn die in Frage kommende Datei rel. klein ist, kannst Du das sicher auch im Speicher machen.

Außerdem kannst Du ruhig die replace Funktion benutzen. Die funktioniert auch, wenn Du sie nicht auf Listen anwendest, sondern auf Strings. Hinweis: readlines() liefert eine Liste von Strings.

Lies' doch mal das Tutorial. Das dauert nicht so furchtbar lange und es werden Dir Schuppen von den Augen fallen!

Gruß,
Christian

Verfasst: Montag 17. September 2007, 18:29
von Joghurt
Und wie schon gesagt, kannst du deine gesamte Funktion "ersetzer" durch replace ersetzen:

Code: Alles auswählen

datei.write(testzeile.replace("a", "f"))
weniger zu schreiben, besser zu lesen, und effizienter/schneller