zoukankan      html  css  js  c++  java
  • configparser

    configparser模块能够配置和解析类似于windows系统下ini格式的文件,一个ini风格文件类似这样:

    [section1]
    option = value
    option: value
    
    [section2]
    option = value
    option: value
    ...

    它有两个概念section 和 option、value,理解起来很像python中字典的key和value. 

    很多应用都是通过配件文件来获取"配置", 这样很灵活。假设有类似这样的配置文件,可以用configparser模块去解析或配置它

    [mysql]
    host = 192.168.127.210
    port = 3306
    db = learpython
    user = access
    passwd = access
    charset = utf8
    
    [redis]
    host = 192.168.127.210
    port = 6379
    db = 0

    基本用法

    from configparser import ConfigParser
    
    confing = ConfigParser()
    confing.read('config.ini')   # ['config.ini']
    
    # 获取所有的section
    confing.sections()           # ['mysql', redis]
    
    # 获取指定section中option-value
    confing.items('mysql')       # [('host', '192.168.127.210'), ('port', '3306'), ('db', 'learpython'), ('user', 'access'), ('passwd', 'access'), ('charset', 'utf8')]
    confing.items('redis')       # [('host', '192.168.127.210'), ('port', '6379'), ('db', '0')]
    dict(confing.items('redis')) # {'host': '192.168.127.210', 'port': '6379', 'db': '0'}
    
    # 获取指定section中所有的option    
    confing.options('mysql')     # ['host', 'port', 'db', 'user', 'passwd', 'charset']
    confing.options('redis')     # ['host', 'port', 'db']
    
    # 获取指定section的value,并且可以进行类型转换
    confing.get('mysql', 'host')           # 192.168.127.210
    confing.getint('redis', 'port')        # 6379  (int)
    
    # 检查指定的section或section中的option是否存在
    confing.has_section('mysql')          # True
    confing.has_section('db2')            # False
    confing.has_option('mysql', 'host')   # True
    confing.has_option('redis', 'hosts')  # Fasle
    
    添加、删除、设置指定的section或section中的option,然后写入配置文件
    
    # 添加section
    confing.add_section('oracle')
    
    # 设置指定section中的option、value
    confing.set('oracle', 'host', '192.16.1.203')
    with open('config.ini', 'w') as f:
        confing.write(f)
    
    # 删除指定section中的option
    confing.remove_option('oracle', 'host')
    with open('config.ini', 'w') as f:
        confing.write(f)
        
    # 删除指定section 
    confing.remove_section('oracle')
    with open('config.ini', 'w') as f:
        confing.write(f)
    from configparser import ConfigParser
    import pymysql
    
    def mysql():
        config = ConfigParser()
        config.read('config.ini')
        section = 'mysql'
        conf = {
            'host': config.get(section, 'host'),
            'port': config.getint(section, 'port'),
            'user': config.get(section, 'user'),
            'passwd': config.get(section, 'passwd'),
            'db': config.get(section, 'db'),
            'charset': config.get(section, 'charset')
        }
        conn = pymysql.connect(**conf)
        return conn
    连接mysql

    Interpolation of values

    ConfigParser还支持interpolation(插值), 这意味着value可以在从get()调用返回之前进行预处理,有点像变量替换一样

    # simple.ini
    [paths]
    home_dir: /Users
    my_dir: %(home_dir)s/lumberjack
    my_pictures: %(my_dir)s/Pictures

    读取paths下的"my_pictures",  

    import configparser
    
    config = configparser.ConfigParser()
    config.read('simple.ini')
    
    print(config.get('paths', 'my_pictures'))   # /Users/lumberjack/Pictures

    ExtendedInterpolation

    ExtendedInterpolation是Interpolation的扩展,使用ExtendedInterpolation可以使用跨section灵活的取值,更加灵活,有这样的ini 文件:

    ; settings.ini
    [SectionOne] Param1: Hello Param2: World [SectionTwo] Param1: ${SectionOne:Param1} ${SectionOne:Param2} [SectionThree] Alpha: One Bravo: Two Charlie: ${Alpha} Mississippi

    使用ExtendedInterpolation,这样可以更灵活的设置和解析section.

    >>> from configparser import ConfigParser, ExtendedInterpolation
    >>> settings = ConfigParser(interpolation=ExtendedInterpolation())
    >>> settings.read('settings.ini')
    ['settings.ini']
    >>> settings.sections()
    ['SectionOne', 'SectionTwo', 'SectionThree']
    >>> settings.get('SectionTwo', 'Param1')
    'Hello World'
    >>> settings.get('SectionThree', 'Charlie')
    'One Mississippi'

    参考:

    https://docs.python.org/3/library/configparser.html
    https://wiki.python.org/moin/ConfigParserExamples
    https://pymotw.com/3/configparser/

  • 相关阅读:
    [BZOJ3757] 苹果树
    [WC2013]糖果公园
    [SCOI2005]王室联邦
    luogu P2709 小B的询问
    [国家集训队]小Z的袜子
    [SDOI2009]HH的项链(莫队)
    [国家集训队]数颜色 / 维护队列(莫队)
    setting>SSH>sessions setting>勾选ssh Keepalive[ MobaXterm】设置保持SSH连接
    解决SSH自动断线,无响应的问题。
    Linux下使用bcwipe擦除磁盘空间
  • 原文地址:https://www.cnblogs.com/huangweimin/p/6845696.html
Copyright © 2011-2022 走看看