2013-08-20 75 views
0

我有蟒蛇工具我寫的做一些WMI監控,數據被寫入該格式Python的更新JSON文件

例1

CPU = [{'TS':'2013:12:03:30','CPUVALUES':['0','1','15']}] 

現在我需要不時更新數據,將看最終喜歡以下

CPU = [ 
    {'TS':'2013:12:03:30','CPUVALUES':['0','1','15']}, 
    {'TS':'2013:14:00:30','CPUVALUES':['0','75','15']} 
] 

任何建議如何實現這一目標

請指點

感謝

+0

只是問如何將項目添加到Python中的列表?或者還有別的嗎? –

+0

讀取,解析,修改,寫入。 –

回答

1

您可以閱讀,分析和每次需要新的數據添加到它時修改的文件,這將是這樣的:

import json 

def append(filename, obj): 
    with open(filename, 'rb') as f: 
     data = json.load(f, encoding='utf-8') 
    data.append(obj) 
    with open(filename, 'wb') as f: 
     json.dump(data, f, encoding='utf-8') 

但是,這可能是非常慢,特別是如果你有一個大文件,因爲你必須每次讀取整個文件到內存中,反序列化它,追加,再次序列化,並寫下來...

如果你需要額外的速度,你可以通過追加來做一點小事新數據文件:

import io 
import json 

def append(filename, data): 
    with open(filename, 'r+b') as f: 
     f.seek(-2, 2) 
     f.write(b',\n') 
     f.write(b' ' + json.dumps(data).encode('utf-8')) 
     f.write(b'\n]') 

此代碼將打開該文件,最後\n]前移動,追加,\n,自卸車新的數據,並添加最終\n]。你只需要小心,不要在文件末尾添加換行符,因爲這會弄亂一些東西。但是如果你需要在最後有一個換行符,那麼你只需要移動到-3,並在最後寫入附加b'\n]\n'

注:此代碼假定您使用UNIX行結束,對於Windows行尾你就必須改變移動和\n

例IPython的會議:

In [29]: %%file test.json 
CPU = [ 
    {"TS": "2013:12:03:30", "CPUVALUES": ["0", "1", "15"]}, 
    {"TS": "2013:14:00:30", "CPUVALUES": ["0", "75", "15"]} 
] 
In [30]: !cat test.json 
CPU = [ 
    {"TS": "2013:12:03:30", "CPUVALUES": ["0", "1", "15"]}, 
    {"TS": "2013:14:00:30", "CPUVALUES": ["0", "75", "15"]} 
] 
In [31]: append('test.json', {'TS':'2013:14:00:30','CPUVALUES':['0','80','15']}) 
In [32]: !cat test.json 
CPU = [ 
    {"TS": "2013:12:03:30", "CPUVALUES": ["0", "1", "15"]}, 
    {"TS": "2013:14:00:30", "CPUVALUES": ["0", "75", "15"]}, 
    {"TS": "2013:14:00:30", "CPUVALUES": ["0", "80", "15"]} 
]