【问题标题】:When saving a Python dictionary, json adds a character to every entry [duplicate]保存Python字典时,json为每个条目添加一个字符[重复]
【发布时间】:2016-05-10 10:36:02
【问题描述】:

我在使用 json 时遇到了奇怪的问题。下面的程序打开一个文件,导入一个字典,添加条目,然后再次保存字典。当程序第二次运行时,在字典的每个键和每个值前面都添加了一个字母“u”。这些不是累积的;多次运行程序不会添加多个“u”。

import json
file1 = open('phonebook.txt', 'r+')
phonebook = json.load(file1)
print phonebook
while(True):
    name = raw_input("Name?")
    if name == "":
        break
    number = raw_input("Number?")
    phonebook[name] = number
file1.close()
file1 = open('phonebook.txt', 'w')
json.dump(phonebook, file1)
print phonebook

顺便说一句,一个不相关的特性:除非我以写入模式关闭并重新打开文件,否则我会收到错误消息。我不知道为什么会这样。

【问题讨论】:

  • 使用转储(将其转储为字符串,而不是对象)并且 u'' 前缀告诉您它是 unicode 数据。
  • 顺便说一下,存储的文件有正确的字典。添加必须发生在 json.load() 过程中。
  • @HGNY:添加发生在print,实际上,特别是在unicode.__repr__,它是从dict.__repr__调用的。
  • 额外的u'' 不会影响数据或数据的处理方式,它只是加载(unicode 字符串)与常规字符串的方式。
  • 啊哈——所以我可以继续使用原始代码!

标签: python json file dictionary


【解决方案1】:

u 代表 unicode “字符串”。更详细的答案看这里 What does the 'u' symbol mean in front of string values?

【讨论】:

    【解决方案2】:

    好的 - 谢谢。这似乎有效:

    import json
    file1 = open('phonebook.txt', 'r')
    phonebook = eval(file1.read())
    while(True):
        name = raw_input("Name?")
        if name == "":
            break
        number = raw_input("Number?")
        phonebook[name] = number
    file1.close()
    file1 = open('phonebook.txt', 'w')
    file1.write(json.dumps(phonebook))
    file1.close()
    

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2020-05-21
      • 1970-01-01
      • 2019-11-16
      相关资源
      最近更新 更多