Seite 1 von 1

Function replace im Modul re und ASCII

Verfasst: Dienstag 7. Juli 2009, 07:30
von xeroxed_yeti
Guten Morgen zusammen,

ich habe mich gestern den ganzen Tag mit Umlauten und Python geärgert und steige einfach nicht hinter meinen Fehler.

Mein Script liest eine Datei mit Umlauten ein und soll diese mit anderen
Buchstabenkombinationen ersetzen.

In der Header Zeile definiere ich den Codec:

Code: Alles auswählen

#!/usr/bin/python2.4 -w
# -*- coding: utf-8 -*- 
Nachdem die File eingelesen wurde durchlaufe ich jede Zeile und will einfach die Umlaute ersetzten. Pyhton Syntax für das 'Ä' sieht folgender Maßen in meinem Script aus:

Code: Alles auswählen

 for line in input:
        print line

        #line = line.encode('utf-8')
         line= line.replace(u'ä', u'ae')
Das Script endet mit der Fehlermeldung: "UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 24: ordinal not in range(128)". Wie muss ich den Syntax wählen, damit ganz klar hervor geht, dass ich keine ASCII Kodierung gewählt habe.

Vielen Dank für eure Hilfe!

Verfasst: Dienstag 7. Juli 2009, 08:04
von ms4py
Was ist mit:

Code: Alles auswählen

line= line.replace('ä', 'ae') 
Schon versucht?

Außerdem sollte die Shebang nie Versions spezifisch sein...

Verfasst: Dienstag 7. Juli 2009, 09:04
von lunar
Du musst bereits beim Öffnen der Datei korrekt dekodieren. Das "codecs"-Modul stellt passende Funktionen dazu bereit.

Verfasst: Dienstag 7. Juli 2009, 09:14
von xeroxed_yeti
Uah, ja so einfach war es.

Hatte gestern so verzweifelt nach Codec Input gesucht und selbst nicht mehr auf die "back to the basic" Sachen geschaut :-)

Die Lösung war:

line = line.replace('ä', 'ae')

Danke!