如何将 JSON 转换为 CSV?(支持 UTF-8)

之前有一个问题如何将 JSON 转换为 CSV?并且有很多答案,但是没有一个解释如何转换非 latin1 数据。


假设我有一个如下所示的 JSON 文件:


[

    {"id":123,"FullName":"Иванов Иван Иванович"},

    {"id":124,"FullName":"Петров Петр Петрович"}

]

我尝试使用这样的脚本:


#!/usr/bin/env python2.7

# -*- coding: utf-8 -*-


import sys

import codecs

import json

import unicodecsv as csv


if __name__ == '__main__':

    fin = codecs.open(sys.argv[1], encoding='utf-8')

    data = json.load(fin)

    fin.close()


    with codecs.open('test.csv', encoding='utf-8', mode='wb') as csv_file:

        w = csv.writer(csv_file, encoding='utf-8')

        w.writerow(data[0].keys())  # header row

    

        for row in data:

            w.writerow(row.values())

这给了我以下错误:


UnicodeDecodeError: 'ascii' 编解码器无法解码位置 32 中的字节 0xd0:序号不在范围内 (128)


首先不清楚位置 32 有什么,但最有趣的问题是是否有办法将 UTF-8 编码的字符串保存到 CSV 文件。


喵喵时光机
浏览 214回答 1
1回答

30秒到达战场

给定test.json(在评论中使用引号和逗号):[    {"id":123,"FullName":"Иванов, \"Иван\" Иванович"},    {"id":124,"FullName":"Петров Петр Петрович"}]这有效:#!/usr/bin/env python2.7import jsonimport unicodecsv as csvwith open('test.json','rb') as fin:    data = json.load(fin)with open('test.csv','wb') as csv_file:    w = csv.writer(csv_file, encoding='utf-8-sig')    w.writerow(data[0].keys())  # header row    for row in data:        w.writerow(row.values())该json模块采用 UTF-8 编码。unicodecsv获取以二进制模式打开的文件,并使用writer实例化时指定的编码进行解码。utf-8-sig如果 .CSV 将在 Excel 中打开,则使用,utf8否则工作。输出:FullName,id"Иванов, ""Иван"" Иванович",123Петров Петр Петрович,124在 Excel 中:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python