【问题标题】:Write JSON objects to file using python使用 python 将 JSON 对象写入文件
【发布时间】:2017-02-06 11:17:07
【问题描述】:

所以我在 python 中有一个函数可以生成这样的字典:

player_data = {
   "player": "death-eater-01",
   "guild": "monster",
   "points": 50
}

我通过调用函数来获取这些数据。一旦我得到这些数据,我想把它写到一个文件中,所以我打电话:

g = open('team.json', 'a')
with g as outfile:
  json.dump(player_data, outfile)

这很好用。但是我的问题是,由于一个团队由多个玩家组成,我再次调用该函数以获取新的玩家数据:

player_data = {
       "player": "moon-master",
       "guild": "mage",
       "points": 250
    }

现在,当我将这些数据写入同一个文件时,JSON 会中断......就像这样,它会像这样显示(两个节点之间缺少逗号):

{
       "player": "death-eater-01",
       "guild": "monster",
       "points": 50
    }
{
       "player": "moon-master",
       "guild": "mage",
       "points": 250
    }

我想要的是将这两个数据作为适当的 JSON 存储到文件中。由于各种原因,我无法预先准备完整的 JSON 对象,然后一次性保存。由于网络中断、性能和其他问题,我必须逐步进行。

谁能指导我如何做到这一点?我正在使用 Python。

【问题讨论】:

  • 不是tuple 而是dict
  • 谢谢。我以为是其中之一。

标签: python json file


【解决方案1】:

您不应将数据附加到现有文件。相反,您应该首先在 Python 中建立一个列表,其中包含您要编写的所有 dicts,然后才将其转储到 JSON 并将其写入文件。

如果你真的不能这样做,一种选择是加载现有文件,将其转换回 Python,然后附加新的 dict,转储到 JSON 并将其写回替换整个文件。

【讨论】:

  • 使其成为有效 JSON 文件的一种方法是编写一个列表。在第一行写"["。然后用逗号替换你的格言。如果能及时检测到数据结束,将最后一个逗号替换为"]"即可关闭列表。如果你已经写了一个逗号,那么在关闭它之前将另一个有效元素添加到列表中。
【解决方案2】:

要生成有效的 JSON,您需要加载文件的先前内容,将新数据附加到该文件中,然后将其写回文件。

像这样:

def append_player_data(player_data, file_name="team.json"):
    if os.path.exists(file_name):
        with open(file_name, 'r') as f:
            all_data = json.load(f)
    else:
        all_data = []
    all_data.append(player_data)
    with open(file_name, 'w') as f:
        json.dump(all_data, f)

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多