Python пишет апострофы в файл - PullRequest
0 голосов
/ 01 марта 2019

Я преобразую загруженный диалог Facebook Messenger из JSON в текстовый файл, используя Python.Я преобразовал JSON в текст, и все выглядит хорошо.Мне нужно убрать ненужную информацию и изменить порядок сообщений, а затем сохранить вывод в файл, что я и сделал.Однако, когда я форматирую сообщения с помощью Python, когда я смотрю на выходной файл, иногда вместо апострофа, вместо него есть â.

Мой Python не очень хорош, так как я обычно работаю с Java, так что, вероятно, я могу многое улучшить.Если бы кто-то мог предложить несколько лучших тегов для этого вопроса, я также был бы очень признателен.

Пример работы апострофов: Вы не делаете их, не так ли?

Пример апострофов не работает: Это просто кнопка, которую я обнаружил

Что вызывает это, и почему это не происходит каждый раз, когда есть апостроф?

Вот сценарий:

#/usr/bin/python3

import datetime

def main():

    input_file = open('messages.txt', 'r')
    output_file = open('results.txt', 'w')

    content_list = []
    sender_name_list = []
    time_list = []

    line = input_file.readline()

    while line:
        line = input_file.readline()

        if "sender_name" in line:
            values = line.split("sender_name")
            sender_name_list.append(values[1][1:])

        if "timestamp_ms" in line:
            values = line.split("timestamp_ms")
            time_value = values[1]
            timestamp = int(time_value[1:])         
            time = datetime.datetime.fromtimestamp(timestamp / 1000.0)      
            time_truncated = time.replace(microsecond=0)
            time_list.append(time_truncated)    

        if "content" in line:
            values = line.split("content")
            content_list.append(values[1][1:])

    content_list.reverse()
    sender_name_list.reverse()
    time_list.reverse()

    for x in range(1, len(content_list)):
        output_file.write(sender_name_list[x])
        output_file.write(str(time_list[x]))
        output_file.write("\n")
        output_file.write(content_list[x])
        output_file.write("\n\n")


input_file.close()
output_file.close()

if __name__ == "__main__":
    main()

Редактировать: ответом на вопрос было добавление

import codecs
input_file = codecs.open('messages.txt', 'r', 'utf-8')
output_file = codecs.open('results.txt','w', 'utf-8')

1 Ответ

0 голосов
/ 01 марта 2019

Не видя входящих данных, трудно быть уверенным, но я подозреваю, что вместо апострофа (Unicode U+0027 ' APOSTROPHE) у вас есть фигурный эквивалент (U+2019 ’ RIGHT SINGLE QUOTATION MARK), пытающийся интерпретироваться как старыйfashioned ascii.

Вместо

output_file = open('results.txt', 'w')

try

import codecs
output_file = codecs.open('results.txt','w', 'utf-8')

Вам также может понадобиться эквивалент в вашем входном файле.

...