2010-03-23 75 views
1

我正在爲另一個程序製作一個插件,所以我正在嘗試儘可能輕量級地製作一個東西。在ConfigParser(或其他)中更新部分

我需要做的是能夠在ConfigParser的配置文件中更新節的名稱。

[project name] 
author:john doe 
email: [email protected] 
year: 2010 

然後我有文本字段,用戶可以在其中編輯項目的名稱,作者,電子郵件和年份。

我不認爲改變[項目名稱]是可能的,所以我想到了兩種解決方案:

1 - 具備我的配置文件是這樣的:

[0] 
projectname: foobar 
author:john doe 
email: [email protected] 
year: 2010 

這樣我可以改變項目的名稱就像另一個選項。但問題是,我需要#部分自動增加([0],[1]等)。要做到這一點,我必須得到每一個部分,然後弄清楚下一個數字應該是什麼。

另一種選擇是刪除整個部分及其值,並用更新後的值重新添加它,這也需要更多的工作,比如通過函數傳遞包含舊部分名稱的變量等,但我不介意它是否更快。

哪兩個最好?還是有另一種方式? 我願意儘可能採用最快/輕量級的解決方案,如果需要更多的工作或者不需要,也無所謂。

回答

2

ini文件可能最適合於配置應用程序,具有明確定義的輸入等等。這聽起來像你想要一個更通用的序列化工具; JSON可能會爲此工作得很好。也許你想存儲一個列表的JSON表示(因此你的增量指數)與這些字段的字典?

在stdlib中使用json模塊非常簡單。例如,存儲一對夫婦的記錄,你會

import json 

projects = [] 
projects.append({'project_name': 'foobar', 
       'author': 'John Doe', 
       'email': '[email protected]', 
       'year': '2010'}) 
projects.append({'project_name': 'baz', 
       'author': 'Cat Stevens', 
       'email': '[email protected]', 
       'year': '2009'}) 

with open('projects.json', 'w') as f: 
    json.dump(projects, f) 

同樣你會從文件恢復序列化的數據與json.load(f),在那裏你已經在讀模式下打開f

+0

謝謝。我會試驗這個 – sqram 2010-03-23 12:17:16