Umlaute in Python

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
Impulse_VLR
User
Beiträge: 2
Registriert: Donnerstag 15. September 2022, 17:20

Ich wollte einfach mal wissen ob es einen Weg gibt Umlaute zu verändern in Python. Also "ü" in "ue", "ö" in "oe", ä in "ae" usw.
Geht das?
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Impulse_VLR: Ja das geht.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Hm, ich würde ja sagen, dass es nicht geht. Zeichenketten sind ja schließlich unveränderlich. :twisted:

Aber man kann sich (ohne Veränderung) eine neue Zeichenkette erstellen, bei der die Umlaute ausgetauscht wurden. Mit der passenden Methode von `str` zum Beispiel.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@narpfel: Es gibt das `ctypes`-Modul. 😈

Wobei `translate()` vielleicht effizienter ist wenn man mehr als ein Zeichen austauschen möchte.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Kebap
User
Beiträge: 686
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Wie hilft das ctypes beim Übersetzen von Buchstaben?
https://docs.python.org/3/library/ctypes.html
Oder ist ein anderes gemeint?

@Impulse_VLR
Warum möchtest du ä in "ae", usw. übersetzen und kannst nicht einfach bei den Umlauten bleiben?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@Kebap: Das war eine Antwort auf meine Aussage, dass Strings immutable sind. Mit `ctypes` kann man sich den Speicher hinter dem String geben lassen und an Python vorbei verändern. Das hat ... interessante Effekte:

Code: Alles auswählen

#!/usr/bin/env python3

import ctypes
import sys

STRING = "Hello, World!"


def main():
    string_to_modify = "Hello, World!"
    size = sys.getsizeof(string_to_modify)
    ctypes.cast(id(string_to_modify), ctypes.POINTER(ctypes.c_char))[size - 10] = b'p'
    print(STRING)
    print("Hello, World!")


if __name__ == "__main__":
    main()
Das Programm gibt

Code: Alles auswählen

$ python t.py
Hellp, World!
Hellp, World!
aus, obwohl das Programm zwei andere Strings ausgibt und nicht den, der verändert wurde.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Die gezeigte Variante ist für den Hausgebrauch für die paar Fälle des Deutschen ausreichend.

Wenn es über den Hausgebrauch hinaus geht, bietet sich das Modul PyICU an, das ein Wrapper um die in C++-geschriebene ICU Bibliothek des Unicode-Konsortiums ist und das Problem (neben vielen, vielen anderen) umfassender abhandelt.

Code: Alles auswählen

In [1]: import icu

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

In [3]: transliterator.transliterate('Ä Ö Ü ä ö ü ß')
Out[3]: 'AE OE UE ae oe ue ss'
Antworten