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/

转载于:https://www.cnblogs.com/huangweimin/p/6845696.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值