2016-06-29 2 views
2

, поэтому я пытаюсь использовать эти данные, которые используют индикаторы unicode и делают печать с emojis. В настоящее время он находится в txt. файл, но позже я напишу в файл excel. Так или иначе, я получаю ошибку, я не уверен, что делать. Это текст, который я читаю:Преобразование в Emoji

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

И вот мой код:

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

Это сообщение об ошибке:

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

Любые идеи? Вот как были изначально сгенерированы данные.

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

Как было 'tweets.txt' генерироваться ? – MattDMo

+0

Вы пытаетесь декодировать объект 'bytes' с« unicode-escape », который был предварительно закодирован с помощью« utf8 »,« unicode-escape »не может читать строки, закодированные с помощью« utf8 ». Я считаю, что самым простым решением вашей проблемы было бы передать правильное кодирование функции 'open' при чтении из файла. –

+0

Итак, это код, который использовался для генерации исходных данных из твиттера: –

ответ

2

Ваш смайликов представлен в виде surrogate pair, смотрите также here для получения информации о данном глифе. Python не может декодировать суррогаты, поэтому вам нужно посмотреть, как именно был создан ваш файл tweets.txt, и попробуйте кодировать оригинальные твиты вместе с emoji как UTF-8. Это значительно облегчит чтение и обработку текстового файла.

+0

Python может декодировать суррогатов просто отлично. Именно JSON может представлять символы, отличные от BMP. – jfs

1

Это, как первоначально было сгенерировано данных ... saveFile.write(json.dumps(data) + "\n")

Вы должны использовать json.loads() вместо .decode('unicode-escape') читать текст JSON:

#!/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

ОК, поэтому ваш метод работает для меня сейчас, когда я просто пишу emoji в текстовый файл. Полное содержимое '' \ ud83d \ ude4f "' плюс новая строка. Я думаю, 'json' обрабатывает суррогатные пары под капотом. Вопрос в том, что если у меня есть суррогатная пара в регулярной строке (строка юникода Py3), представленная как '' \ ud83d \ ude4f "', как OP, как мне обрабатывать это для печати emoji? Все, что я пробовал, дало мне ошибки относительно суррогатных пар. – MattDMo

+0

@MattDMo OP использует 'json.dumps()', и поэтому в файле вообще нет символов, отличных от ASCII, (вы видите в моем ответе 'encoding =" ascii "'). Случай, который вы описываете, не имеет никакого отношения к анализу результата 'json.dumps()', как требует OP. Если у вас другой вопрос, задайте его как отдельный вопрос переполнения стека. – jfs

+0

Хорошо, я задам новый вопрос. – MattDMo

Смежные вопросы