2017-02-04 57 views
0

我想創建模擬器,將JSON格式數據添加到txt文件,直到我將其關閉。 應的數據看起來像這樣:Python,JSON - 寫數據模擬

{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文件中的數據更新,但數據庫只會在投票停止前進行選擇。

我希望這會更容易理解我想要做什麼。也許我的想法是錯誤的,我應該考慮一些不同的事情,因爲它太複雜了。在JSON

+0

你真的想一個接一個地添加元素到文件嗎?如果你想要輸出你需要的,你必須在內存中創建整個對象(一個大字典),然後將其寫入磁盤。 –

回答

1

數據不看起來像我,因爲你是在你的while循環創建一個新的字典,每次前

那寫。您必須首先構建完整的字典,然後將其寫入您的文件。

此外,你的while循環沒有退出條件。它將永遠運行。

第一個問題:當我停止程序

這是因爲Python不會直接寫在實際的文件,但到緩衝區中的data.txt文件是空的。看到這個問題了解更多信息。 How come a file doesn't get written until I stop the program?

JSON並不是將數據連續附加到文件的最佳選擇,尤其是如果您希望它在附加之間是正確的JSON。每次更新時都必須寫出整個字典。改爲使用CSV。

+0

好的,但我想保存這些數據,並隨時訪問,如果我建立完整的字典,我可以在json.dump()命令後訪問這些數據。 第一個問題解決了,謝謝:) – Reyaven

+0

你是什麼意思與「有機會」?你有權使用你的字典。所以你可以隨心所欲地做任何事情。 – trixn

+0

@Reyaven看到我更新的答案。 – trixn