更新ConfigParser中的部分(或替代)

时间:2010-03-23 05:10:23

标签: python configparser

我正在为另一个程序制作一个插件,所以我试图让事情尽可能轻量级。

我需要做的是能够更新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]等)。要做到这一点,我必须得到每个部分,并找出下一个数字应该是什么。

另一个选项是删除整个部分及其值,并使用更新的值重新添加它,这也需要更多的工作,例如通过函数传递保存旧部分名称的变量,等等,但我不介意它是否更快。

两者中哪一个最好?还是有另一种方式? 我愿意尽可能使用最快/最轻的解决方案,无论是否需要更多工作都无所谓。

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