fellfresse hat geschrieben:obwohl ich den grund noch nicht verstehe.
Hallo fellfresse!
Das Problem ist, dass du nicht nur einen Fehler gemacht hast.
Ich habe dein Programm mal kommentiert. Bitte nicht falsch vestehen. Ich will dich damit nicht runter machen. Ich möchte, dass du daraus etwas lernst und ein guter Python-Programmierer wirst.
Code: Alles auswählen
dateiname = 'windowstextdatei.txt'
# Teilweise falsche Einrückung (zwei statt vier Leerzeichen)
try:
datei = open(dateiname, 'r+')
# Die Datei wird hier also im TEXTMODUS zum Lesen und Schreiben geöffnet.
# Jedes Zeilenende ist hiermit automatisch "\n" und nicht "\r\n", wie später
# von dir erwartet.
except IOError:
print 'Die Datei %s wurde nicht gefunden, oder kann nicht geoeffnet werden.' % filename
# Du fängst zwar den Fehler ab, reagierst aber nicht darauf. Das Programm
# läuft weiter. Auch wenn die Datei nicht existiert. Folglich wird spätestens
# in der nächsten Programmzeile ein Fehler ausgelöst.
for line in datei:
if('\r\n' in line):
# Die ``if``-Bedingungen müssen nicht geklammert werden.
# Das macht erst dann Sinn, wenn es mehrere Bedingungen gibt -- um diese
# optisch voneinander zu trennen.
line.rstrip('\r\n','\n')
# Das geht schon gar nicht. Erstens nimmt ``rstrip()`` nur einen Parameter
# und zweitens sollte hier schon eher ``replace()`` stehen, damit es auch
# eine Auswirkung haben könnte. Dann solltest du das Ergebnis auch einer
# Variablen zuweisen. (z.B.: ``line = line.replace("\r\n", "\n")``)
datei.write(line)
# Hier würdest du den Text von der aktuellen Position aus mit dem neuen
# Text überschreiben. Erstens ist die aktuelle Position exakt nach dem
# soeben gelesenen -- also stehst du hier falsch und zweitens würdest du
# den Text mit der falschen Zeichenanzahl überschreiben. Du kannst ein
# "\r\n" nicht mit "\n" überschreiben, da "\n" zu wenig Platz beansprucht.
# Würdest du den Text sogar an der korrekten Position überschreiben, dann
# wäre das Ergebnis am Zeilenende "\n\n".
else:
break
datei.close()
print(">>> Konvertierung erfolgreich abgeschlossen...")
Die meisten Probleme kannst du vermeiden, in dem du aus einer Datei liest, die Änderungen im Speicher durchführst und in eine andere Datei schreibst. Wenn alles erfolgreich durchgeführt wurde, dann kannst du z.B. die alte Datei löschen und die neue Datei umbenennen.
Wenn es sich um kleine Dateien handelt, dann kannst du die Datei zum Lesen öffen, den Inhalt der Datei komplett in den Speicher laden, dann die Datei schließen, zum Schreiben öffnen und dann den geänderten Text in die Datei schreiben.
Die Datei zum Lesen und gleichzeitig zum Schreiben zu öffnen, ist dann schon eher etwas fortgeschrittenes und führt in vielen Fällen auch nicht zum Erfolg.
Und hier habe ich noch Lesestoff für dich:
http://www.python-forum.de/topic-6157.html
mfg
Gerold