Python,JSON - 编写数据模拟

时间:2017-02-04 11:54:40

标签: python json

我想创建模拟器whitch将JSON格式化数据添加到txt文件,直到我将其关闭。 数据看起来应该是这样的:

{user : [
    {
        "ID" : "12"
        "button" : "red"
    },
    {
        "ID" : "11"
        "button" : "red"
    }]
}

这就是我所做的:

import json
import random
import time

buttons = ['red', 'green', 'blue', 'yellow']
IDs = ['11', '12', '13', '14', '26', '51', '112', '3']
data = {}  
data['user'] = []  
data['user'].append({  
    'ID': random.choice(IDs),
    'button': random.choice(buttons)
})
with open('data.txt', 'w') as outfile: 

while True:
    data = {}
    data['user'] = []
    data['user'].append({
        'ID': random.choice(IDs),
        'button': random.choice(buttons)
    })
    json.dump(data, outfile)
    time.sleep(1)

第一个问题:当我停止程序时,data.txt文件为空, 第二:JSON中的数据看起来不像我之前写的那样,但看起来像这样:

{user : [
    {
        "ID" : "12"
        "button" : "red"
    }],
{user : [
    {
        "ID" : "11"
        "button" : "red"
    }]
}

我只想要一个标签用户。

感谢。

编辑: 也许如果我解释它的用途会更容易。它的投票模拟,通常在投票开始时人们按下按钮有一些选项,有能力改变思维并按下之前的不同按钮,但是当投票停止时,人们仍然可以按下按钮并更新json文件中的数据但更新到数据库只有在投票停止之前才会做出选择。

我希望能更容易理解我想做什么。也许我的观念是错误的,我应该考虑一些不同的东西,因为它太复杂了。

1 个答案:

答案 0 :(得分:1)

  

JSON中的数据看起来不像我之前写的

这是因为您每次都在while循环中创建一个新词典。您必须首先构建完整的字典,然后将其写入您的文件。

你的while循环也没有退出条件。它将永远运行。

  

第一个问题:当我停止程序时,data.txt文件为空

这是因为python不会直接将其写入实际文件而是写入缓冲区。有关更多信息,请参阅此问题。 How come a file doesn't get written until I stop the program?

JSON不是连续向文件追加数据的最佳选择,特别是如果您希望它在追加之间是正确的JSON。每次更新时都必须编写整个dict。请改用CSV。