代码之家  ›  专栏  ›  技术社区  ›  sqram

在configparser中更新节(或其他选项)

  •  1
  • sqram  · 技术社区  · 14 年前

    我正在为另一个程序做一个插件,所以我试图使事情尽可能轻。

    我需要做的是能够更新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 回复  |  直到 14 年前
        1
  •  2
  •   Mike Graham    14 年前

    ini文件可能最适合 配置 应用程序,具有定义良好的输入等等。听起来你想要一个更通用的序列化工具;json可能很适合这个。也许您想用这些字段存储dict列表的json表示(因此您的索引是递增的)?

    使用 json stdlib中的模块非常简单。例如,要存储一些记录

    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 处于读取模式。