使用Python 2.7 csv.writer的UnicodeEncodeError

时间:2017-12-05 01:00:03

标签: python json python-2.7 csv python-unicode

我正在尝试将数据从json文件转换为csv文件。

    with open('data.json') as data_file:    
        x = json.load(data_file)

    g = csv.writer(open("output.csv", "wb+"))
    g.writerow(["name", "price", "1 star", "2 star", "3 star", "4 star", "5 star", "review_author", "review_comment_count", "review_header", 
        "review_posted_date", "review_rating", "review_text", "url"].encode('utf-8'))

    for x in x:
        for i in range(len(x["reviews"])):
            g.writerow([x["name"],
                x["price"],
                x["ratings"]["1 star"],
                x["ratings"]["2 star"],
                x["ratings"]["3 star"],
                x["ratings"]["4 star"],
                x["ratings"]["5 star"],
                x["reviews"][i]["review_author"],
                x["reviews"][i]["review_comment_count"],
                x["reviews"][i]["review_header"],
                x["reviews"][i]["review_posted_date"],
                x["reviews"][i]["review_rating"],
                x["reviews"][i]["review_text"],
                x["url"]])

我希望得到一个包含所有列(价格,1星,2星等)的CSV文件,其中行作为相应的数据。

相反,我得到一个错误:

追踪(最近一次通话): ReadAsin()中的文件“scraper5.py”,第162行 在ReadAsin x [“url”]中编码“scraper5.py”,第159行.coding('utf8')]) UnicodeEncodeError:'ascii'编解码器无法编码位置377中的字符u'\ u2019':序数不在范围内(128)

如果我注释掉第159行,我会得到x [“reviews”] [i] [“review_text”]的相同错误。我在这里查看了以前的问题,但没有一个解决方案似乎有效。有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

您的脚本失败,因为json文件包含一些非ascii字符。系统默认编码字符集ascii无法传输它,超出范围(128)。

尝试将要输出的所有行显式编码到文件中,例如

g.writerow([x["name"].encode('utf8'),
            x["reviews"][i]["review_author"].encode('utf8'),
            x["reviews"][i]["review_comment_count"].encode('utf8')
            x["url"].encode('utf8')])