我正在为另一个程序制作一个插件,所以我试图让事情尽可能轻量级。
我需要做的是能够更新ConfigParser配置文件中某个部分的名称。
[project name]
author:john doe
email: spam@example.com
year: 2010
然后我有文本字段,用户可以在其中编辑项目的名称,作者,电子邮件和年份。
我不认为改变[项目名称]是可能的,所以我想到了两个解决方案:
1 - 我的配置文件如下:
[0]
projectname: foobar
author:john doe
email: spam@example.com
year: 2010
这样我可以像其他选项一样更改项目名称。但问题是,我需要#节自动递增([0],[1]等)。要做到这一点,我必须得到每个部分,并找出下一个数字应该是什么。
另一个选项是删除整个部分及其值,并使用更新的值重新添加它,这也需要更多的工作,例如通过函数传递保存旧部分名称的变量,等等,但我不介意它是否更快。
两者中哪一个最好?还是有另一种方式? 我愿意尽可能使用最快/最轻的解决方案,无论是否需要更多工作都无所谓。
答案 0 :(得分:2)
ini文件可能最适合配置应用程序,具有明确定义的输入等。听起来你想要一个更通用的序列化工具; JSON可能会很好用。也许你想用这些字段存储一个列表的JSON表示(因此你的递增索引)?
stdlib中json
模块的使用非常简单。例如,要存储几个记录,您将
import json
projects = []
projects.append({'project_name': 'foobar',
'author': 'John Doe',
'email': 'spam@example.com',
'year': '2010'})
projects.append({'project_name': 'baz',
'author': 'Cat Stevens',
'email': 'cs@example.com',
'year': '2009'})
with open('projects.json', 'w') as f:
json.dump(projects, f)
同样,您可以使用json.load(f)
从文件中恢复序列化数据,您已在阅读模式下打开f
。