Seite 1 von 1

äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 09:55
von Torsten.E
Ich vermute, die Frage wurde schon zum 1000 mal gestellt,
aber wie bekomme ich die deutsche Umlaute ausgetauscht

Code: Alles auswählen

name = 'Blümchenweg'
name.replace('ü', 'ue')
funktioniert leider nicht.

Danke für die Hilfe

Torsten

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 10:06
von __deets__
Das funktioniert schon, aber weil Strings in Python unveraenderlich sind, musst du das Ergebnis auch zuweisen. Es wird nicht in-place gemacht.

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 10:12
von Torsten.E
__deets__ hat geschrieben: Mittwoch 8. April 2020, 10:06 Das funktioniert schon, aber weil Strings in Python unveraenderlich sind, musst du das Ergebnis auch zuweisen. Es wird nicht in-place gemacht.
Super danke, nur "lower()" funktioniert in Python2 mit den "großen" Umlauten nicht
diese habe explizit nochmals ersetzen müssen.

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 10:15
von Sirius3
Das funktioniert auch mit Python2, Du darfst halt keine Byte-Strings benutzen, sondern mußt Unicode verwenden (wie in Python3).
Python2 ist aber veraltet und sollte nicht mehr verwendet werden.

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 10:16
von __deets__
Du solltest kein Python 2 mehr benutzen, das seit dieses Jahres ungewartet. Neuer Code sollte in Python 3 geschrieben sein. Und da zumindest geht das auch fuer mich:

Code: Alles auswählen

10:12 $ python3
Python 3.7.3 (default, Oct  7 2019, 12:56:13) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'ü'
>>> s.upper()
'Ü'
>>> s.upper().lower()
'ü'

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 10:20
von Torsten.E
__deets__ hat geschrieben: Mittwoch 8. April 2020, 10:16 Du solltest kein Python 2 mehr benutzen, das seit dieses Jahres ungewartet. Neuer Code sollte in Python 3 geschrieben sein. Und da zumindest geht das auch fuer mich:

Code: Alles auswählen

10:12 $ python3
Python 3.7.3 (default, Oct  7 2019, 12:56:13) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'ü'
>>> s.upper()
'Ü'
>>> s.upper().lower()
'ü'
Da stimmte ich mit Dir vollkommen überein. Aber ich habe das Projekt auch nur übernommen und muss mich hier leider an die Vorgaben (Python2) halten. - wer fährt schon freiwillig ein rostiges Auto? :D

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 10:39
von __blackjack__
@Torsten.E: Man sollte in Python 2 konsequent darauf achten `str` nicht für Text zu verwenden sondern `unicode`. Am besten fängst Du auch gleich damit an Zeichenkettenliterale mit Text mit einem u zu markieren, und welche mit Binärdaten mit b. Mindestens bei neuem Code oder welchem den man verändert. Damit man irgendwann auch mal von dem rostigen Auto weg kommen kann. 🙂

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 12:31
von nezzcarth
Wenn es nur um einzelne kürzere Zeichenketten und nur um diese paar Zeichen geht, sind die Ersetzungen okay. Wenn es um größere Mengen geht und/oder wenn man auch andere Normalisierungen oder Zeichen braucht, bietet sich das PyICU Paket an.

Das sieht dann so z.B. aus:

Code: Alles auswählen

In [1]: import icu                                                                                                                                                                            

In [2]: transliterator = icu.Transliterator.createInstance('de-ascii; lower')                                                                                                                 

In [3]: transliterator.transliterate('Ä Ö Ü ä ö ü ß ł ŧ ø þ æ ſ ð đ ŋ ħ ĸ Ł Ŧ Ø Þ Æ ẞ Ð Ŋ Ħ')                                                                                                 
Out[3]: 'ae oe ue ae oe ue ss l t o th ae s d d n h q l t o th ae ss d n h'

Re: äöüß -> ae, oe, ue, ss

Verfasst: Mittwoch 8. April 2020, 16:57
von snafu
Alternativ zu mehreren replace()-Aufrufen kann man auch translate() nutzen:

Code: Alles auswählen

table = str.maketrans({'Ä': 'Ae', 'ä': 'ae', 'Ö': 'Oe', 'ö': 'oe', 'Ü': 'Ue', 'ü': 'ue'})
print(text.translate(table))