• python的ConfigParser模块


    import configparser
    
    conf = configparser.ConfigParser()
    print(type(conf)) #conf是类

    conf.read('config.ini')
    sections
    = conf.sections() #获取配置文件中所有sections,sections是列表

    print(sections)
    option
    = conf.options(conf.sections()[0]) #获取某个section下的所有选项或value,等价于 option = conf.options('logoninfo') print(option)
    #value = conf.get('logoninfo', 'addr') #根据section和value获取key值,等价于value = conf.get(conf.sections()[0], conf.options(conf.sections()[0])[0]) print(value)
    item
    = conf.items('logoninfo')
    print(item)运行结果如下: <class 'configparser.ConfigParser'>['logoninfo', 'logging', 'mysql']['addr', 'passwd', 'popserver']wangershazi[('addr', 'wangershazi'), ('passwd', 'wangerxifu'), ('popserver', 'newmail')] Process finished with exit code 0
    import configparser #引入模块
    
    config = configparser.ConfigParser()    #类中一个方法 #实例化一个对象
    
    config["DEFAULT"] = {'ServerAliveInterval': '45',
                          'Compression': 'yes',
                         'CompressionLevel': '9',
                         'ForwardX11':'yes'
                         }    #类似于操作字典的形式
    
    config['bitbucket.org'] = {'User':'Atlan'} #类似于操作字典的形式
    
    config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
    
    with open('example.ini', 'w') as configfile:
    
       config.write(configfile)    #将对象写入文件

    读文件

    import configparser
    config
    = configparser.ConfigParser()
    #---------------------------查找文件内容,基于字典的形式

    print(config.sections()) # [] config.read('example.ini') print(config.sections()) # ['bitbucket.org', 'topsecret.server.com'] print('bytebong.com' in config) # False print('bitbucket.org' in config) # True print(config['bitbucket.org']["user"]) # Atlan print(config['DEFAULT']['Compression']) #yes print(config['topsecret.server.com']['ForwardX11']) #no print(config['bitbucket.org']) #<Section: bitbucket.org> for key in config['bitbucket.org']: # 注意,有default会默认default的键 print(key) print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键 print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对 print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value

    修改

    import configparser
    
    config = configparser.ConfigParser()
    
    config.read('example.ini')  #读文件
    
    config.add_section('yuan')  #添加section
    
    
    
    config.remove_section('bitbucket.org') #删除section

    config.remove_option('topsecret.server.com',"forwardx11") #删除一个配置项 config.set('topsecret.server.com','k1','11111') config.set('yuan','k2','22222') with open('new2.ini','w') as f: config.write(f)

    方法

    下面这三种方式使用时,切记注意

    在调用这三个函数时,切记这三个函数会将调用optionxform(),在传递键值对数据时,会将键名 全部转化为小写

    RawConfigParser()

    ConfigParser.RawConfigParser([defaults[, dict_type[, allow_no_value]]])

    defaults : 如果指定默认值,则使用默认值的键值对


    dict_type:使用新的section的键值对


    allow_no_value :默认是False,如果是True,表示可以接收空值(None)


    return:对象

    不支持可变参数,在section中不能存在%()s

    ConfigParser()

    ConfigParser.ConfigParser([defaults[, dict_type[, allow_no_value]]]) 

    在default中必须出现%()s

    SafeConfigParser()

     ConfigParser.SafeConfigParser([defaults[, dict_type[, allow_no_value]]]) 

    更加智能化,在section中是否存在%()s会自动判断

    传递参数使用函数optionxform(),foo %(bar)s 和 foo %(BAR)s是相同的,optionxform()会将大写字母全部转换为小写。

    常见异常

    异常描述
    ConfigParser.Error 所有异常的基类
    ConfigParser.NoSectionError 指定的section没有找到
    ConfigParser.DuplicateSectionError 调用add_section() 时,section名称已经被使用
    ConfigParser.NoOptionError 指定的参数没有找到
    ConfigParser.InterpolationError 当执行字符串插值时出现问题时,出现异常的基类
    ConfigParser.InterpolationDepthError 当字符串插值无法完成时,因为迭代次数超过了最大的范围,所以无法完成。InterpolationError的子类
    InterpolationMissingOptionError 当引用的选项不存在时,会出现异常。InterpolationError的子类
    ConfigParser.InterpolationSyntaxError 当产生替换的源文本不符合所需的语法时,就会出现异常。InterpolationError的子类。
    ConfigParser.MissingSectionHeaderError 当试图解析一个没有分段标题的文件时,会出现异常。
    ConfigParser.ParsingError 当试图解析文件时发生错误时,会出现异常
    ConfigParser.MAX_INTERPOLATION_DEPTH 当raw参数为false时,get()的递归插值的最大深度。这只适用于ConfigParser类

    RawConfigParser 对象

    对象的操作可以分为两大类,一种是对配置文件的操作,另一种是对读取后数据流的操作。

    对配置文件的操作

    读取配置文件

    方法描述
    read(filenames) filesnames是一个列表,需要从文件加载初始值的应用程序应该在调用read()之前使用readfp()加载所需的文件或文件。
    readfp(fp[, filename]) 在fp中,从文件或文件类对象中读取和解析配置数据(只使用readline()方法)。如果文件名被省略,并且fp有一个name属性,它被用于文件名;默认值为< ? >。

    写入配置文件

    方法描述
    write(fileobject) 将配置的表示写入指定的文件对象。这个表示可以由未来的read()调用解析。

    对内存中数据流的操作

    增加配置文件中的值

    方法描述
    add_section(section) 向实例添加一个section

    删除配置文件中的值

    方法描述
    remove_option(section, option) 从指定的部分中删除指定的选项。如果该部分不存在,请提出NoSectionError。如果存在的选项被删除,返回True;否则返回False。
    remove_section(section) 从配置中删除指定的section。如果这个部分确实存在,返回True。否则返回假

    修改配置文件中的值

    方法描述
    set(section, option, value) 如果给定的部分存在,将给定的选项设置为指定的值
    optionxform(option) 也可以在一个实例上重新设置它,对于一个需要字符串参数的函数。例如,将其设置为str,将使选项名称区分大小写

    查找配置文件中的值

    方法描述
    defaults() 返回包含实例范围默认值的字典。
    sections() 返回可用的section的列表;默认section不包括在列表中
    has_section(section) 指示指定的section是否出现在配置中。默认的section未被确认
    options(section) 返回指定section中可用的选项列表。
    has_option(section, option) 如果给定的section存在,并且包含给定的选项,则返回True;否则返回False
    get(section, option) 为指定的section获取一个选项值。
    getint(section, option) 它将指定section中的选项强制转换为整数
    getfloat(section, option) 它将指定section中的选项强制转换为浮点型
    getboolean(section, option) 强制转换为布尔型,”1”, “yes”, “true”, and “on”, 转换为True,”0”, “no”, “false”, and “off”, 转换为Falseo 其他返回ValueError.
    items(section) 返回给定section中每个选项的(name,value)对的列表。
    import ConfigParser, os
    
    config = ConfigParser.ConfigParser()
    config.readfp(open('defaults.cfg'))
    config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])

    实例一:写配置文件

    import ConfigParser
    
    config = ConfigParser.RawConfigParser()
    
    
    config.add_section('Section1')
    config.set('Section1', 'an_int', '15')
    config.set('Section1', 'a_bool', 'true')
    config.set('Section1', 'a_float', '3.1415')
    config.set('Section1', 'baz', 'fun')
    config.set('Section1', 'bar', 'Python')
    config.set('Section1', 'foo', '%(bar)s is %(baz)s!')
    
    # Writing our configuration file to 'example.cfg'
    with open('example.cfg', 'wb') as configfile:
        config.write(configfile)

    实例二:读配置文件

    import ConfigParser
    
    config = ConfigParser.RawConfigParser()
    config.read('example.cfg')
    
    
    a_float = config.getfloat('Section1', 'a_float')
    an_int = config.getint('Section1', 'an_int')
    print a_float + an_int
    
    
    if config.getboolean('Section1', 'a_bool'):
        print config.get('Section1', 'foo')

    实例三:获取插入值

    import ConfigParser
    
    config = ConfigParser.ConfigParser()
    config.read('example.cfg')
    
    # Set the third, optional argument of get to 1 if you wish to use raw mode.
    print config.get('Section1', 'foo', 0)  # -> "Python is fun!"
    print config.get('Section1', 'foo', 1)  # -> "%(bar)s is %(baz)s!"
    
    # The optional fourth argument is a dict with members that will take
    # precedence in interpolation.
    print config.get('Section1', 'foo', 0, {'bar': 'Documentation',
                                            'baz': 'evil'})

    实例四:默认值

    所有三种类型的config分析器都可以使用默认值。如果在其他地方没有定义一个选项,那么它们就被用于插值

    import ConfigParser
    
    # New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' each
    config = ConfigParser.SafeConfigParser({'bar': 'Life', 'baz': 'hard'})
    config.read('example.cfg')
    
    print config.get('Section1', 'foo')  # -> "Python is fun!"
    config.remove_option('Section1', 'bar')
    config.remove_option('Section1', 'baz')
    print config.get('Section1', 'foo')  # -> "Life is hard!"

    实例五:在各section之间移动选项

    def opt_move(config, section1, section2, option):
        try:
            config.set(section2, option, config.get(section1, option, 1))
        except ConfigParser.NoSectionError:
            # Create non-existent section
            config.add_section(section2)
            opt_move(config, section1, section2, option)
        else:
            config.remove_option(section1, option)

    实例六:配置文件中有空值

    一些配置文件包含了没有值的设置,但是它与ConfigParser支持的语法相一致。对构造函数的不允许值参数可以被用来表示应该接受这样的值

    >>> import ConfigParser
    >>> import io
    
    >>> sample_config = """
    ... [mysqld]
    ... user = mysql
    ... pid-file = /var/run/mysqld/mysqld.pid
    ... skip-external-locking
    ... old_passwords = 1
    ... skip-bdb
    ... skip-innodb
    ... """
    >>> config = ConfigParser.RawConfigParser(allow_no_value=True)
    >>> config.readfp(io.BytesIO(sample_config))
    
    >>> # Settings with values are treated as before:
    >>> config.get("mysqld", "user")
    'mysql'
    
    >>> # Settings without values provide None:
    >>> config.get("mysqld", "skip-bdb")
    
    >>> # Settings which aren't specified still raise an error:
    >>> config.get("mysqld", "does-not-exist")
    Traceback (most recent call last):
      ...
    ConfigParser.NoOptionError: No option 'does-not-exist' in section: 'mysqld'
  • 相关阅读:
    JVM学习笔记-方法区(Method Area)
    JVM学习笔记-类型信息(Type Information)
    JVM学习笔记-常量池(Constant Pool)
    JVM学习笔记-字段信息(Field Information)
    hive schematool -initSchema -dbType mysql 报错
    flink error: Exception in thread "main" java.lang.NoClassDefFoundError
    python error: TypeError: cannot serialize '_io.TextIOWrapper' object
    multiprocessing.Pool 捕获error
    sysdig 安装与使用(转载)
    sonatype nexus简介(转)
  • 原文地址:https://www.cnblogs.com/chengxuyonghu/p/13761538.html
Copyright © 2020-2023  润新知