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?
Umlaute in Python
- __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
Hm, ich würde ja sagen, dass es nicht geht. Zeichenketten sind ja schließlich unveränderlich.
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.
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.
- __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.
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
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?
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.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
@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:
Das Programm gibt
aus, obwohl das Programm zwei andere Strings ausgibt und nicht den, der verändert wurde.
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()
Code: Alles auswählen
$ python t.py
Hellp, World!
Hellp, World!
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.
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'