ConfigParser模块主要是用来解析配置文件的模块,像mysql,或者win下面的ini文件等等

下面我们来解析mysql的配置文件my.cnf
my.cnf配置文件内容

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

SafeConfigParser()  是配置文件解析器类,该类的方法有
read(configfile):读取配置文件
get(node,options),找出node节点的options选项的值([mysqld]是节点,socket是选项)
[root@localhost config]# cat 1c.py
import ConfigParser
parser=ConfigParser.SafeConfigParser()
parser.read('/etc/my.cnf')
print parser.get('mysqld','socket')
[root@localhost config]# python 1c.py
/var/lib/mysql/mysql.sock

sections():获取配置文件的节点,返回一个列表
options(node):获取节点里面的选项,返回一个列表
items(node):把节点名里面选项和值,以字典的方式返回,即选项=值
 1 [root@localhost config]# cat 2c.py
 2 import ConfigParser
 3 parser=ConfigParser.SafeConfigParser()
 4 parser.read('/etc/my.cnf')
 5 print parser.sections()  #打印配置文件里面的节点
 6 for nodename in parser.sections():
 7     print "nodename:",nodename
 8     print "optionsname:",parser.options(nodename) #获取节点名里面的选项
 9     for name,value in parser.items(nodename):    #以字典的方式返回
10         print "%s=%s"%(name,value)
11
12 [root@localhost config]# python 2c.py
13 ['mysqld_safe', 'mysqld']
14 nodename: mysqld_safe
15 optionsname: ['log-error', 'pid-file']
16 log-error=/var/log/mysqld.log
17 pid-file=/var/run/mysqld/mysqld.pid
18 nodename: mysqld
19 optionsname: ['datadir', 'socket', 'symbolic-links', 'user']
20 datadir=/var/lib/mysql
21 socket=/var/lib/mysql/mysql.sock
22 symbolic-links=0
23 user=mysql

值的类型
get(node,options):会返回一个字符串
getint():返回一个整数
getfloat():返回一个浮点型
getboolean():返回布尔值,真值:1,yes,on,True 假值:0,no,off,false
如果mysql配置文件里面打开了log-bin日志功能那么里面的log-bin将是没有值的,这样在python2.6.6里面就没法解析文件
原因是这个python版本的ConfigParser.py文件缺少了allow_no_value属性,这个属性的值默认是False的
我想了一个偏门的方法,找一个python2.7.5的安装包把里面的ConfigParser.py文件复制到脚本运行的目录里面去,就样就可以运行了
[root@localhost config]# cat 3c.py
import ConfigParser
parser=ConfigParser.SafeConfigParser(allow_no_value=True)
parser.read('/etc/my.cnf')
for node in parser.sections():for optionname in parser.options(node):print "%s=%s"%(optionname,parser.get(node,optionname)) #利用get方法返回一个值的整型,但是log-bin没有值,所以返回None
[root@localhost config]# python 3c.py
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
user=mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-bin=None

测试节点或者选项是否存在
has_section(node):如果节点存在就返回True,不存在就返回False
has_option(node,option):如果节点里面的选项存在就返回True,不存在就返回False
这里我们来做个测试,还是上面那个my.cnf文件,我在[mysqld]里面添加了serverid这个选项但是没有给值,我没配置[mysqld1]这个节点和里面的serverid选项
 1 [root@localhost config]# cat 4c.py
 2 import ConfigParser
 3 parser=ConfigParser.SafeConfigParser(allow_no_value=True)
 4 parser.read('/etc/my.cnf')
 5 for section in ['mysqld','mysqld1']:
 6     print "[%s] is exists?:%s" %(section,parser.has_section(section))
 7     print "[%s]serverid option is exists?:%s"%(section,parser.has_option(section,'serverid'))
 8 [root@localhost config]# python 4c.py
 9 [mysqld] is exists?:True
10 [mysqld]serverid option is exists?:True
11 [mysqld1] is exists?:False
12 [mysqld1]serverid option is exists?:Fals

add_section(node):增加一个节点
set(node,options,value):修改或者添加选项,注意值只接受字符串
remove_section(node):移除一个节点,注意节点移除后,这个节点里面的选项也会自动跟着移除
remove_option(node,option):移除一个选项
尝试添加一个mysqld1节点并添加选项和值serverid=2,和一个单独的选项log-bin,记住添加单独的属性值allow_no_value=True
(不知道为什么把节点给弄反了,一直没找出原因和解决方法)
 1 [root@localhost config]# cat 5c.py
 2 import ConfigParser
 3 import sys
 4 parser=ConfigParser.SafeConfigParser(allow_no_value=True)
 5 parser.read('/etc/my.cnf')
 6 parser.add_section('mysqld1')
 7 parser.set('mysqld1','serverid','2')
 8 parser.set('mysqld1','log-bin')
 9 parser.write(sys.stdout)
10 [root@localhost config]# python 5c.py
11 [mysqld1]
12 serverid = 2
13 log-bin
14
15 [mysqld_safe]
16 log-error = /var/log/mysqld.log
17
18 [mysqld]
19 socket = /var/lib/mysql/mysql.sock
20 datadir = /var/lib/mysql
21 log-bin
22 serverid = 2
23 symbolic-links = 0
24 user = mysql

修改serverid属性值并写进my.cnf文件(节点顺序也反了)

 1 [root@localhost config]# cat 5c1.py
 2 import ConfigParser
 3 parser=ConfigParser.SafeConfigParser(allow_no_value=True)
 4 parser.read('/etc/my.cnf')
 5 parser.set('mysqld','serverid','8')
 6 with open('/etc/my.cnf','w') as f:
 7     parser.write(f)
 8 [root@localhost config]# python 5c1.py
 9 [root@localhost config]# cat 5c1.py
10 import ConfigParser
11 parser=ConfigParser.SafeConfigParser(allow_no_value=True)
12 parser.read('/etc/my.cnf')
13 parser.set('mysqld','serverid','8')
14 with open('/etc/my.cnf','w') as f:
15     parser.write(f)
16 [root@localhost config]# cat /etc/my.cnf
17 [mysqld_safe]
18 log-error = /var/log/mysqld.log
19
20 [mysqld]
21 socket = /var/lib/mysql/mysql.sock
22 datadir = /var/lib/mysql
23 log-bin
24 serverid = 8
25 symbolic-links = 0
26 user = mysql

转载于:https://www.cnblogs.com/pping/p/3893524.html

python ConfigParser模块 配置文件解析相关推荐

  1. Python Configparser模块读取、写入配置文件

    写代码中需要用到读取配置,最近在写python,记录一下. 如下,假设有这样的配置. [db] db_host=127.0.0.1 db_port=3306 db_user=root db_pass= ...

  2. python configparser模块来 读取 、 创建 和 修改 配置文件

    安装configparser模块 # python2.7模块名为ConfigParser pip3 install configparser 创建配置文件 创建一个example.ini配置文件,具体 ...

  3. python configparser模块_Python标准库之ConfigParser模块

    ConfigParser模块用于生成和修改常见配置文档. 比如配置文件格式如下: [DEFAULT] ServerAliveInterval= 45Compression=yes Compressio ...

  4. python ConfigParser模块详解

    功能介绍: 在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简 ...

  5. Python configparser模块操作代码实例

    1.生成配置文件 '''生成配置文件 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的 ...

  6. Python configparser模块

    来看一个好多软件的常见文档格式如下: 1 2 3 4 5 6 7 8 9 10 11 12 [DEFAULT] ServerAliveInterval = 45 Compression = yes C ...

  7. Python ConfigParser 模块

    用于生成和修改常见配置文档 import configparserconfig = configparser.ConfigParser() config["DEFAULT"] = ...

  8. python配置文件解析_Python中配置文件解析模块-ConfigParser

    Python中有ConfigParser类,可以很方便的从配置文件中读取数据(如DB的配置,路径的配置). 配置文件的格式是: []包含的叫section, section 下有option=valu ...

  9. [Python]ConfigParser解析配置文件

    近期发现非常多接口配置都硬编码在souce file中了,于是就看了下python怎么解析配置文件,重构下这一块. 这个应该是早就要作的... 配置文件: [mysqld] user = mysql ...

  10. python生成配置文件config_Python configparser模块封装及构造配置文件

    1.configparser模块简介 使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configP ...

最新文章

  1. java bean配置文件_Spring中多配置文件及引用其他bean的方式
  2. FPGA 开平方方法
  3. .net 无法通过嵌套类型访问外部类型的非静态成员-解决方案
  4. 轻量级微服务架构实践之路
  5. 三、【SAP-PM模块】PM模块主数据
  6. 实车采集的数据重建场景_SIGGRAPH | 多机器人协同三维场景重建
  7. POJ 1655 Balancing Act (树的重心)
  8. 优化 Azure 成本,实现财务目标
  9. 使用Terraform创建托管版Kubernetes
  10. 61 MM配置-后勤发票校验-发票冻结-设置容差限制
  11. Input 输入设备驱动框架
  12. 自动布局之autoresizingMask
  13. P3853 [TJOI2007]路标设置
  14. 某企业信息安全体系整体建设方案规划方案毕业设计毕业答辩
  15. SWS_BICUBIC未声明的标识符解决方法
  16. 神操作!我把 3000 行代码重构成 15 行!
  17. 文件夹中的文件在另一程序被打开
  18. IFD6500_USB转串口驱动
  19. 零基础学python_03_字符串(拼接+换行+制表符)
  20. 如何调整word分栏后,左右不平齐的现象

热门文章

  1. 认识以及安装redis
  2. 解决微信小程序要求TLS版本不低于1.2问题
  3. python进阶---pandas基本介绍
  4. leetCode题解之寻找string中最后一个word的长度
  5. Mac端SVN工具CornerStone详解
  6. Seek and Destroy
  7. IO-01. 表格输出(5)
  8. 黑马程序员——农夫过河问题
  9. Zoj3762 等待解决
  10. 关于3Q大战和反垄断