1

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

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

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

两者哪个最好?还是有其他方法?我愿意采用最快/轻量级的解决方案,不管它是否需要更多的工作。

4

1 回答 1

2

ini 文件可能最适合配置具有明确定义的输入等的应用程序。听起来您想要一个更通用的序列化工具;JSON 可能会很好地解决这个问题。也许您想存储带有这些字段的 dicts 列表(因此您的递增索引)的 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

于 2010-03-23T05:27:40.517 回答