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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Torsten.E
User
Beiträge: 5
Registriert: Mittwoch 8. April 2020, 09:42
Wohnort: Maria Thann

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das funktioniert schon, aber weil Strings in Python unveraenderlich sind, musst du das Ergebnis auch zuweisen. Es wird nicht in-place gemacht.
Benutzeravatar
Torsten.E
User
Beiträge: 5
Registriert: Mittwoch 8. April 2020, 09:42
Wohnort: Maria Thann

__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.
Sirius3
User
Beiträge: 17761
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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()
'ü'
Benutzeravatar
Torsten.E
User
Beiträge: 5
Registriert: Mittwoch 8. April 2020, 09:42
Wohnort: Maria Thann

__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
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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. 🙂
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
nezzcarth
User
Beiträge: 1638
Registriert: Samstag 16. April 2011, 12:47

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'
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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