config类中的Python新节

时间:2019-06-18 21:36:28

标签: python

我正在尝试编写动态配置.ini 我可以在其中添加具有键和值的新部分,也可以添加较少键的值。 我写了一个创建.ini的代码。但是该部分将作为“默认”出现。 同样,它每次都覆盖文件而无需添加新部分。

我已经在python 3中编写了一个代码来创建.ini文件。

import configparser


"""Generates the configuration file with the config class. 
The file is a .ini file"""


class Config:

    """Class for data in uuids.ini file management"""

    def __init__(self):

        self.config = configparser.ConfigParser()
        self.config_file = "conf.ini"

       # self.config.read(self.config_file)

    def wrt(self, config_name={}):


        condict = {

            "test": "testval",
            'test1': 'testval1',
            'test2': 'testval2'

        }

        for name, val in condict.items():

            self.config.set(config_name, name, val)

        #self.config.read(self.config_file)

        with open(self.config_file, 'w+') as out:
            self.config.write(out)


if __name__ == "__main__":
    Config().wrt()

我应该能够使用键或不使用键添加新部分。 附加键或值。 它应该具有正确的部分名称。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题:

  • 使用可变对象作为默认参数可能会有点 棘手,您可能会看到意外的行为。
  • 您使用的是config.set()。
  • 您将config_name默认为字典,为什么?
  • 空白太多:p
  • 如下所示,您无需遍历字典项即可使用更新的功能(无旧版)将其写入

这应该有效:

"""Generates the configuration file with the config class.

The file is a .ini file
"""
import configparser
import re


class Config:
    """Class for data in uuids.ini file management."""

    def __init__(self):
        self.config = configparser.ConfigParser()
        self.config_file = "conf.ini"

    # self.config.read(self.config_file)

    def wrt(self, config_name='DEFAULT', condict=None):
        if condict is None:
            self.config.add_section(config_name)
            return

        self.config[config_name] = condict

        with open(self.config_file, 'w') as out:
            self.config.write(out)

        # after writing to file check if keys have no value in the ini file (e.g: key0 = )
        # the last character is '=', let us strip it off to only have the key
        with open(self.config_file) as out:
            ini_data = out.read()

        with open(self.config_file, 'w') as out:
            new_data = re.sub(r'^(.*?)=\s+$', r'\1', ini_data, 0, re.M)
            out.write(new_data)
            out.write('\n')


condict = {"test": "testval", 'test1': 'testval1', 'test2': 'testval2'}

c = Config()

c.wrt('my section', condict)
c.wrt('EMPTY')
c.wrt(condict={'key': 'val'})
c.wrt(config_name='NO_VALUE_SECTION', condict={'key0': '', 'key1': ''})

这将输出:

[DEFAULT]
key = val

[my section]
test = testval
test1 = testval1
test2 = testval2

[EMPTY]

[NO_VALUE_SECTION]
key1 
key0