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
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?

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))