• python ConfigParser模块 配置文件解析


    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
  • 相关阅读:
    【转】使用python编写网络通信程序
    【转】linux下的单线程
    【转】使用python进行多线程编程
    mysql数据库安装、启动及权限设置
    【转】Linux下的多线程编程背景知识
    开关电源使用
    ubi实际使用
    xshell快捷键
    Nandflash镜像尾部不应填充0xFF
    CRC校验
  • 原文地址:https://www.cnblogs.com/pping/p/3893524.html
Copyright © 2020-2023  润新知