我想创建模拟器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文件中的数据但更新到数据库只有在投票停止之前才会做出选择。
我希望能更容易理解我想做什么。也许我的观念是错误的,我应该考虑一些不同的东西,因为它太复杂了。
答案 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。