Python将撇号写入文件

Python将撇号写入文件,python,python-3.x,string-formatting,Python,Python 3.x,String Formatting,我正在使用Python将下载的Facebook Messenger对话从JSON转换为文本文件。我已将JSON转换为文本,看起来一切正常。我需要去除不必要的信息并颠倒消息的顺序,然后将输出保存到一个文件中,我已经完成了。然而,当我使用Python格式化消息时,当我查看输出文件时,有时会看到–而不是撇号 我的Python并不像我通常使用Java那样出色,所以我可能还有很多地方需要改进。如果有人能为这个问题推荐一些更好的标签,我也会非常感激 撇号起作用的例子:你不是在制造它们,是吗 撇号不起作用的例

我正在使用Python将下载的Facebook Messenger对话从JSON转换为文本文件。我已将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')

在没有看到传入数据的情况下,很难确定,但我怀疑这里不是撇号(
Unicode U+0027'撇号
),而是一个卷曲的等价物(
U+2019'右单引号
),试图解释为老式的ascii

而不是

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


您可能还需要输入文件中的等效项。

请将输入、输出和所需输出添加到您的问题中。您的文字描述不太清楚。您在哪里看到
?在从JSON转换的文本文件中?或者之后还有其他输出文件吗?如果您觉得下面的答案解决了您的问题,请接受它作为答案。我尝试了您的建议,发现UnicodeDecodeError:“ascii”编解码器无法解码位置141处的字节0xc3:序号不在范围内(128)。这是什么意思?。编辑:我在输入_文件中添加了相同的行,它可以工作。谢谢嘿很高兴它起作用了。虽然我不得不承认,我有点被0xc3甩了。我希望0xe2是utf-8编码的U+2019'右单引号的第一个字节(请参阅);0xe2也是您所看到的字符的“扩展ascii”(请参阅)。我不知道0xc3是怎么进去的。无论如何,很高兴它有帮助。FWIW您不需要使用
编解码器。open
在Python3中,您可以在
open
buildin:
open('results.txt','w',encoding='utf-8')
中指定编码。如果未指定,
打开
将使用平台默认值。@snakecharmerb,很好,这显然是更好的方法。我碰巧手头有一些使用
编解码器的代码,所以我选择了它,因为我可以肯定它可能会工作。
import codecs
output_file = codecs.open('results.txt','w', 'utf-8')