zoukankan      html  css  js  c++  java
  • python configparser模块详解

    此模块提供了一个实现基本配置语言的类

    首先来看一个非常基本的配置文件,如下所示格式:

    [DEFAULT]
    ServerAliveInterval = 45
    Compression = yes
    CompressionLevel = 9
    ForwardX11 = yes
    
    [bitbucket.org]
    User = hg
    
    [topsecret.server.com]
    Port = 50022
    ForwardX11 = no
    

    可以通过编程的方式创建上述文件:

    >>> import configparser
    >>> config = configparser.ConfigParser()
    >>> config['DEFAULT'] = {'ServerAliveInterval': '45',
    ...                      'Compression': 'yes',
    ...                      'CompressionLevel': '9'}
    >>> config['bitbucket.org'] = {}
    >>> config['bitbucket.org']['User'] = 'hg'
    >>> config['topsecret.server.com'] = {}
    >>> topsecret = config['topsecret.server.com']
    >>> topsecret['Port'] = '50022'     # mutates the parser
    >>> topsecret['ForwardX11'] = 'no'  # same here
    >>> config['DEFAULT']['ForwardX11'] = 'yes'
    >>> with open('example.ini', 'w') as configfile:
    ...   config.write(configfile)
    ...
    

    创建完毕之后我们可以通过以下代码来回读所记录的数据:

    >>> import configparser
    >>> config = configparser.ConfigParser()
    >>> config.sections()
    []
    >>> config.read('example.ini')
    ['example.ini']
    >>> config.sections()
    ['bitbucket.org', 'topsecret.server.com']
    >>> 'bitbucket.org' in config
    True
    >>> 'bytebong.com' in config
    False
    >>> config['bitbucket.org']['User']
    'hg'
    >>> config['DEFAULT']['Compression']
    'yes'
    >>> topsecret = config['topsecret.server.com']
    >>> topsecret['ForwardX11']
    'no'
    >>> topsecret['Port']
    '50022'
    >>> for key in config['bitbucket.org']: print(key)  # 默认值会一直存在
    ...
    user
    compressionlevel
    serveraliveinterval
    compression
    forwardx11
    >>> config['bitbucket.org']['ForwardX11']
    'yes'
    

    配置文件有几个部分组成:每个部分有[section]标题引导,其后跟着特定的字符串(=或:)分割键值对。默认情况下,节名称区分大小写。值可以跨越多行,只要他们比第一行缩进更深。
    配置文件可以包括注释,通过特定的字符(#或;)表示。
    例如:

    [Simple Values]
    key=value
    spaces in keys=allowed
    spaces in values=allowed as well
    spaces around the delimiter = obviously
    you can also use : to delimit keys from values
    
    [All Values Are Strings]
    values like this: 1000000
    or this: 3.14159265359
    are they treated as numbers? : no
    integers, floats and booleans are held as: strings
    can use the API to get converted values directly: true
    
    [Multiline Values]
    chorus: I'm a lumberjack, and I'm okay
        I sleep all night and I work all day
    
    [No Values]
    key_without_value
    empty string value here =
    
    [You can use comments]
    # like this
    ; or this
    
    # By default only in an empty line.
    # Inline comments can be harmful because they prevent users
    # from using the delimiting characters as parts of values.
    # That being said, this can be customized.
    
        [Sections Can Be Indented]
            can_values_be_as_well = True
            does_that_mean_anything_special = False
            purpose = formatting for readability
            multiline_values = are
                handled just fine as
                long as they are indented
                deeper than the first line
                of a value
            # Did I mention we can indent comments, too?
    

    由于解析器并不会记录文件中值得数据类型,它始终以字符串的形式保存。因此简单的传递 bool() 函数并不会处理出正确结果,因为 bool('False') 仍然返回 True 配置器提供了一个方法 **getboolean()** 此方法可以识别 (不区分大小写)'yes'/ 'no','on'/ 'off', 'true'/ 'false'和'1'/ '0'中的布尔值。例如: ```python # 上接上述配置代码 >>> topsecret.getboolean('ForwardX11') False >>> config['bitbucket.org'].getboolean('ForwardX11') True >>> config.getboolean('bitbucket.org', 'Compression') True # 此外,配置器还提供了 getint() 和 getfloat() 方法来处理数据类型 ```

    像字典一样,配置器提供了获取 section 值的方法 get()

    >>> topsecret.get('Port')
    '50022'
    >>> topsecret.get('CompressionLevel')
    '9'
    >>> topsecret.get('Cipher')
    >>> topsecret.get('Cipher', '3des-cbc')
    '3des-cbc'
    

    需要注意的是:默认值(default)优先于回退值(fallback),例如CompressionLevel密钥仅在该DEFAULT部分中指定。如果我们尝试topsecret.server.com部分获取它,即使我们指定了后备,我们也将始终获得默认值

    >>> topsecret.get('CompressionLevel', '3')
    '9'
    

    以下是 configparser 模块的基本方法: * 读取配置文件 1. defaults() 返回包含实例范围默认值的字典 2. read(filename) 直接读取ini文件内容 3. sections() 获取所有的 section,以列表的形式返回 4. options(section) 获取指定 section 的所有的 option 5. items(section) 获取指定 section 所有的键值对 6. get(section, option) 获取指定 section 中 option 的值 7. getint(section, option) 获取指定 section 中 option 的值,以 int 类型返回 8. getfloat(section, option) 获取指定 section 中 option 的值,以 float 类型返回 9. getboolean(section, option) 获取指定section 中 option 的值,以 boolean类型返回 * 写入配置文件 1. add_section(section) 添加指定的新的 section 2. has_section(section) 判断是否存在指定的 section 3. set(section, option, value) 设置指定 section 中 option 的值 4. remove_section(section) 删除指定 section 5. remove_option(section, option) 删除指定 section 中的 option 6. write(fileobject) 将内容写入配置文件
  • 相关阅读:
    angular 封装http请求、解决跨域问题
    TCP协议数据读取
    Dart里继承extends和实现implements的区别
    MySQL通过frm和ibd恢复表结构和数据的办法【基于Linux和MySQL5.6.23测试】
    Dart里实现可增长List和定长List的runtimeType的toString()的值是一样的功能
    MySQL位判断
    SpringBoot URL参数解析坑
    android 实用抓取手机log方法(均为转载)
    python 创建动态类
    Mac技巧之苹果电脑上将一个软件进程的 CPU 占用率限制在指定范围内:cputhrottle
  • 原文地址:https://www.cnblogs.com/During/p/10846274.html
Copyright © 2011-2022 走看看