2016-06-29 17 views
2

konvertieren, also versuche ich, diese Daten zu nehmen, die Unicode-Indikatoren verwenden und es mit Emojis drucken lassen. Es befindet sich derzeit in einem txt. Datei, aber ich werde später in eine Excel-Datei schreiben. Jedenfalls bekomme ich einen Fehler, ich bin nicht sicher, was ich damit anfangen soll. Dies ist der Text, den ich lesen bin:In Emoji

"Thanks @UglyGod \ud83d\ude4f https:\\/\\/t.co\\/8zVVNtv1o6\" 
"RT @Rosssen: Multiculti beatdown \ud83d\ude4f https:\\/\\/t.co\\/fhwVkjhFFC\" 

Und hier ist mein Code:

sampleFile= open('tweets.txt', 'r').read() 
splitFile=sampleFile.split('\n') 
for line in sampleFile: 
    x=line.encode('utf-8') 
    print(x.decode('unicode-escape')) 

Dies ist die Fehlermeldung:

UnicodeDecodeError: 'unicodeescape' codec can't decode byte 0x5c in position 0: \ at end of string 

Irgendwelche Ideen? So wurden die Daten ursprünglich generiert.

class listener(StreamListener): 

    def on_data(self, data): 
     # Check for a field unique to tweets (if missing, return immediately) 
     if "in_reply_to_status_id" not in data: 
      return 
     with open("see_no_evil_monkey.csv", 'a') as saveFile: 
      try: 
       saveFile.write(json.dumps(data) + "\n") 
      except (BaseException, e): 
       print ("failed on data", str(e)) 
       time.sleep(5) 
     return True 

    def on_error(self, status): 
     print (status) 
+1

Wie war 'erzeugt tweets.txt' ? – MattDMo

+0

Sie versuchen, ein 'Bytes'-Objekt mit' Unicode-Escape 'zu decodieren, das zuvor mit' utf8 'codiert wurde,' Unicode-Escape 'kann keine mit' utf8 'codierten Strings lesen. Ich glaube, die einfachste Lösung für Ihr Problem wäre, beim Lesen aus der Datei die korrekte Codierung an die 'open'-Funktion zu übergeben. –

+0

Also das ist der Code, der verwendet wurde, um die ursprünglichen Daten von twitter zu generieren: –

Antwort

2

Ihre Emojis als surrogate pair dargestellt, siehe auch here für Informationen zu dieser speziellen Glyphe. Python kann keine Surrogate decodieren. Sie müssen also genau untersuchen, wie Ihre -Datei generiert wurde, und versuchen, die ursprünglichen Tweets zusammen mit dem Emoji als UTF-8 zu codieren. Dies erleichtert das Lesen und Verarbeiten der Textdatei.

+0

Python kann Surrogate gut dekodieren. So kann JSON Nicht-BMP-Zeichen darstellen. – jfs

1

Dies ist, wie die Daten ursprünglich erzeugt wurde ... saveFile.write(json.dumps(data) + "\n")

Sie json.loads() statt .decode('unicode-escape') verwenden soll JSON Text zu lesen:

#!/usr/bin/env python3 
import json 

with open('tweets.txt', encoding='ascii') as file: 
    for line in file: 
     text = json.loads(line) 
     print(text) 
+0

OK, Ihre Methode funktioniert jetzt für mich, wenn ich das Emoji einfach in eine Textdatei schreibe. Der vollständige Inhalt ist "" und ein Zeilenumbruch. Ich nehme an, 'json' behandelt die Ersatzpaare unter der Haube. Die Frage ist, ob ich ein Ersatzpaar in einer regulären Zeichenkette (Py3-Unicode-Zeichenkette) wie "\ uud83d \ ude4f" 'wie das OP habe, wie verarbeite ich das, um das Emoji zu drucken? Alles, was ich versuchte, gab mir Fehler über Ersatzpaare. – MattDMo

+0

@MattDMo OP verwendet 'json.dumps()' und deshalb gibt es überhaupt keine Nicht-ASCII-Zeichen in der Datei (siehst du 'encoding =" ascii "' in meiner Antwort). Der Fall, den Sie beschreiben, hat nichts damit zu tun, das Ergebnis von 'json.dumps()' zu parsen, wie OP es benötigt. Wenn Sie eine andere Frage haben, fragen Sie sie als separate Stack Overflow-Frage. – jfs

+0

OK, ich werde eine neue Frage stellen. – MattDMo