【问题标题】:Python Type Error While Writing a json File编写 json 文件时出现 Python 类型错误
【发布时间】:2017-09-28 10:08:02
【问题描述】:

我正在制作一本我们大都市区的字典。结构是这样的:

  {
  "Abilene": {
    "allCities": [
      "Abilene"
    ], 
    "latitude": "30.1588129", 
    "longName": "Abilene, TX Metropolitan Statistical Area", 
    "longitude": "-85.6602058", 
    "primaryState": "TX", 
    "states": [
      "TX"
    ]
  }, 

我想将此字典作为 json 编码的 unicode 写入文件,因此我导入了 unicode 文字和 io 包:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import io
from os.path import exists
import json
import unicodedata

我正在设置文字中的键和 unicode 字符串中的值。

metropolitans[primaryCity] = {'allCities':allCities, 'longName':longName, 'allStates':states, 'primaryState':states[0]}

metropolitans[primaryCity]['longitude'] = unicode(str(coordinates[primaryCity]['longitude']), encoding = 'utf-8')

然后,我想将都市圈保存到 unicode 格式的 json 文件中。

with io.open('results.json', 'w', encoding='utf-8') as results:
results.truncate()
json.dump(metropolitans, results, ensure_ascii=False, encoding='utf-8', results, indent=2, sort_keys=True)

而且,我得到了这个错误:

File "readMetropolitan.py", line 190, in <module>
json.dump(metropolitans, results, indent=2, sort_keys=True)
File "/usr/lib/python2.7/json/__init__.py", line 190, in dump
    fp.write(chunk)
TypeError: write() argument 1 must be unicode, not str

这是为什么呢?我知道我可以用 'wb' 完成写一个文件,但我想用 unicode 写这个文件。

如果我使用 dumps() 和 write(),我可以写这个文件:

s = json.dumps(metropolitans, ensure_ascii=False, encoding='utf-8', indent=2, sort_keys=True)
results.write(s)

【问题讨论】:

  • 你能提供你所有的代码吗?
  • 我认为您不需要with io.open(...) 中的encoding='utf-8'
  • longName等数据是从哪里来的。是unicode吗?
  • @Stephen Rauch 我有一个硬编码字典,它由文字值组成,因此 unicode 与 from future import unicode_literals。我想。而且,我检查了 type(longName)。

标签: python json unicode


【解决方案1】:

您在错误代码上方发布的代码甚至没有运行,因为错误回溯表明在 readMetropolitan.py 文件的第 190 行运行此行时发生错误:

json.dump(metropolitans, results, indent=2, sort_keys=True)

虽然您发布的代码是:

json.dump(metropolitans, ensure_ascii=False, encoding='utf-8', results, indent=2, sort_keys=True)

它们绝对不一样。也许代码是在编辑之前运行的?

错误回溯的前两行具体说明了触发错误的原因。

File "readMetropolitan.py", line 190, in <module>
json.dump(metropolitans, results, indent=2, sort_keys=True)
File "/usr/lib/python2.7/json/__init__.py", line 190, in dump
    fp.write(chunk)
TypeError: write() argument 1 must be unicode, not str

另外,在关键字参数之后不能有位置参数results。因此,它应该是:

json.dump(metropolitans, results, ensure_ascii=False, encoding='utf-8', indent=2, sort_keys=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2021-08-21
    • 2015-08-11
    相关资源
    最近更新 更多