Python: Replace Emoji Codes mit Emoji?
Hallo,
ich habe folgendes Problem:
In meiner Variablen die in einer txt gespeichert wird, will ich Emojis benutzen. Da Emojis nicht in einer txt seien können, würde ich gerne die Emojis der Variablen durch ihren jeweiligen Code ersetzen, sprich:
Hallo 😃
wird zu
Hallo :smiley:
Genau den selben Vorgang nur andersrum (:smiley: wird zu 😃) in Variable müsste es auch geben. Gibt es da eine Lösung für Python, bei der ich nicht eine sehr, sehr lange Liste mit Emojis und Emoji Codes machen muss?
2 Antworten
Also nehmen wir mal an, du hast eine Smiley-Datenbank in Form einer Textdatei, mit folgendem Inhalt:
😀 smiley
😁 happy
😇 angel
😈 devil
😞 sad
😠 angry
😮 oh
😱 munch
😴 sleep
(Ich weiß, es gibt noch viel mehr, aber das soll jetzt nur ein Beispiel sein!)
Dann kannst du mit folgendem Codeschnipsel Smileys durch Textrepräsentation und umgekehrt in einem Text ersetzen:
import codecs
smiley_text = {}
text_smiley = {}
with codecs.open('smileys.txt', 'r', 'utf-8', 'strict') as fh:
for line in fh:
if ' ' not in line:
continue
smiley, text = line.strip().split(' ', 1)
text = ':%s:' % text
smiley_text[smiley] = text
text_smiley[text] = smiley
message = '''
Das ist das Haus, vom Nikolaus. :happy:
Und das nebenan, vom Weihnachtsmann. :smiley:
'''.strip()
print('ORIGINAL:\n%s' % message)
for text, smiley in text_smiley.items():
if text in message:
message = message.replace(text, smiley)
print('REPLACE A:\n%s' % message)
for smiley, text in smiley_text.items():
if smiley in message:
message = message.replace(smiley, text)
print('REPLACE B:\n%s' % message)
Damit erhältst du folgende Ausgabe:
ORIGINAL:
Das ist das Haus, vom Nikolaus. :happy:
Und das nebenan, vom Weihnachtsmann. :smiley:
REPLACE A:
Das ist das Haus, vom Nikolaus. 😁
Und das nebenan, vom Weihnachtsmann. 😀
REPLACE B:
Das ist das Haus, vom Nikolaus. :happy:
Und das nebenan, vom Weihnachtsmann. :smiley:
Wie du siehst, funktioniert die Ersetzung damit recht einfach. Die entsprechende Funktionalität musst du dir natürlich noch selber in eine Klasse oder schicke Funktionen verpacken, aber so siehst du erst mal, wie das im Großen und Ganzen funktioniert.
Disclaimer: Ich weiß, dass der Code nicht allzu optimal ist, aber da er möglichst auch für Anfänger ohne große Vorkenntnisse verständlich sein soll, will ich jetzt nicht übertreiben.
Aus Effizienzgründen würde ich normalerweise mit einem Iterator über "message" gehen, aber das würde den Code deutlich vergrößern.
PS: Damit du smileys in Textdateien speichern kannst, musst du ein Unicode-Format wählen. Hierzulande ist UTF-8 am geläufigsten.
PPS: Genau genommen kannst du Unicode-Zeichen auch in ASCII-Dateien speichern, aber das funktioniert bei den wenigsten Dateiformaten, da hierfür spezielle Interpretationen nötig sind.
Bei HTML, XML, LaTeX, usw. kann man relativ problemlos alle Zeichen des Unicode-Zeichensatzes speichern und darstellen, obwohl man nur die ASCII-Kodierung nutzt, aber bei den meisten anderen reinen Textdatei-Formaten gibt es dafür leider keine Möglichkeit.
Warum solltest du das nicht speichern könnnen? Emojis sind auch nur ganz normale Unicodezeichen. Das heißt wenn du mit entsprechendem Encoding in eine Textdatei schreibst und liest hast du keine Probleme.