【问题标题】:Python 3 Encoding Issues when converting to CSV from JSON从 JSON 转换为 CSV 时的 Python 3 编码问题
【发布时间】:2017-08-28 22:43:44
【问题描述】:

Python3

我查看了其他解决方案,但它们似乎还没有涵盖我的情况。我负责编写脚本来获取 JSON 并将其转换为 CSV 文件。

我已经完成了很多工作,但在写入数据时遇到了问题。我收到的数据与写入的数据不符。下面是一个例子。我不知道如何获得它以保留编码。

我应该提一下,默认编码是 UTF-8

输入:necesitará

输出:necesitará

import csv
import json
import sys
import sys
print(sys.getdefaultencoding())
stuff = open('data.json')

jsonStuff = json.loads(stuff.read(), encoding="utf-8")
with open('output.csv', 'w', newline='\n', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile, delimiter=",",quotechar='"',quoting=csv.QUOTE_MINIMAL)

    for element in jsonStuff:
        row = ""
        key = element['key']
        values = element['valuesRow']

        row = element['key']
        # values[0]['value'], values[1]['value'], values[2]['value'], values[3]['value'],

        writer.writerow([element['key'], values[3]['value']])

【问题讨论】:

  • 向我们展示您的代码可能是一个好的开始...
  • 也许您先使用.encode('utf-8'),然后进行转换?
  • 我实际上并没有转换它。我想保留它的格式。
  • 我知道flask默认使用ascii作为它的json响应。也许你的作家也是如此?

标签: python json character-encoding ascii utf


【解决方案1】:

删除open('output.csv', 'w', newline='\n', encoding='utf-8') 中的encoding='utf-8' 应该可以修复它。


data.json (utf-8): {"first": "necesitará", "second": "bodø"}

以下...

import csv
import json

with open('data.json') as stuff, open('output.csv', 'w', newline='\n', encoding='utf-8') as csvfile:
    jsonStuff = json.loads(stuff.read(), encoding="utf-8")
    writer = csv.writer(csvfile, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL)
    first = jsonStuff['first']
    second = jsonStuff['second']
    writer.writerow([first, second])

... 给出 output.csv:necesitará,bodø

然而……

import csv
import json

with open('data.json') as stuff, open('output.csv', 'w', newline='\n') as csvfile:
    jsonStuff = json.loads(stuff.read(), encoding="utf-8")
    writer = csv.writer(csvfile, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL)
    first = jsonStuff['first']
    second = jsonStuff['second']
    writer.writerow([first, second])

... 生成 output.csv:necesitará,bodø

就是这么说的。当您拥有json.load() 时,没有理由使用json.loads(),而且您定义的大部分内容都是默认值。我只是做...

import csv
import json

with open('data.json') as jsonfile, open('output.csv', 'w') as csvfile:
    json_data = json.load(jsonfile)
    writer = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL)
    first = json_data['first']
    second = json_data['second']
    writer.writerow([first, second])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2018-03-03
    • 1970-01-01
    • 2021-07-27
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多