配置文件

  很多软件都用到了配置文件,像git运行的时候会读取~/gitconfig,MySQL运行的时候会读取/etc/my.cnf,Python 提供的包管理工具pip命令,也会去读取~/.pip/pip.cnf文件。

  配置文件的好处是,配置成功后不需要每次使用时都指定相应的参数,而且,典型的ini格式的配置文件具有和编程语言无关、可读性强和易于处理等优点、已经被广泛使用。

  一个典型的配置文件包含一到多个章节(section),每个章节下包含一到多个选项(option)。下面是一个MySQL的配置文件:

[client]
port = 3306
user = mysql
password = mysql
host = 127.0.0.1 [mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
tmpdir = /tmp
skip-external-locking

ConfigParser模块

  Python中使用ConfigParser模块来解析配置文件。ConfigParser中包含一个ConfigParser类,一个ConfigParser对象可以同时解析多个配置文件,一般情况下我们只会使用ConfigParser模块解析一个文件文件。

  首先,解析一个配置文件,需要先创建一个ConfigParser对象,创建ConfigParser对象时有多个参数,其中比较重要的是allow_no_value,allow_no_value默认取值为False,表示在配置文件中是否允许有没有选项的值的情况。默认情况下每个选项都应该有一个值,但是在一些特殊的应用选项下,选项存在即为真,不存在即为假,比如上面MySQL的配置文件skip-external-locking。所以如果需要解析这样的参数,那么就需要在实例化的时候添加allow_no_value 为True

>>> import ConfigParser
>>> cp = ConfigParser.ConfigParser(allow_no_value=True)
>>>

  有了ConfigParser对象以后,我们就可以使用read方法,从配置文件中读取配置内容了。

>>> cp.read('/etc/my.cnf')
['/etc/my.cnf']
>>>

主要方法

ConfigParser对象中有很多方法,其中与读取配置文件,判断配置相关的方法有:

  • sections:返回一个包含所有章节的列表
  • has_sections:判断章节是否存在
  • items:以元祖的形式返回所有的选项
  • options:返回一个包含章节下所有选项的列表
  • has_option:判读某个选项是否存在
  • get、getboolean、getinit、getfloat:获取选项的值

下面以MySQL的配置文件my.cnf为例子

>>> cp.sections()
['mysqld', 'mysqld_safe'] >>> cp.has_section('mysqld')
True >>> cp.has_section('client')
False >>> cp.options('mysqld')
['datadir', 'socket', 'user', 'symbolic-links'] >>> cp.has_option('mysqld','user')
True >>> cp.get('mysqld','user')
'mysql'
>>>

ConfigParser对象也提供了许多方法便于我们修改配置文件:

  • remove_section:删除一个章节
  • add_section:添加一个章节
  • remote_option:删除一个选项
  • set:添加一个选项
  • write:将ConfigParser对象中保存的数据保存的文件中去
>>> cp.add_section('client')
>>> cp.set('client','host','127.0.0.1')
>>> cp.set('client','user','mysql')
>>> cp.set('client','password','123456')
>>> cp.write(open('/tmp/my.cnf','w'))
>>> exit()
[root@centos-linux python]# cd /tmp
my.cnf [root@centos-linux tmp]# cat my.cnf
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
user = mysql
symbolic-links = 0 [mysqld_safe]
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid [client]
host = 127.0.0.1
user = mysql
password = 123456 [root@centos-linux tmp]#

  

Python模块学习 - ConfigParser的更多相关文章

  1. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  2. 【转】Python模块学习 - fnmatch & glob

    [转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...

  3. Python模块之: ConfigParser 配置文件读取

    Python模块之: ConfigParser 配置文件读取   ConfigParser用于读写类似INI文件的配置文件,配置文件的内容可组织为组,还支持多个选项值(option-value)类型. ...

  4. Python模块学习filecmp文件比较

    Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...

  5. python 模块之-configparser

    python 模块configparser   配置文件模块 import configparser    config = configparser.ConfigParser() config[&q ...

  6. day5模块学习--configparser模块

       使用ConfigParser模块读写ini文件(http://blog.csdn.net/linda1000/article/details/11729561) ConfigParserPyth ...

  7. python模块学习第 0000 题

    将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...

  8. Python模块学习:logging 日志记录

    原文出处: DarkBull    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...

  9. 解惑Python模块学习,该如何着手操作...

    Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...

随机推荐

  1. HUAS 1483 mex(莫队算法)

    考虑莫队算法,对于区间减小的情况,可以O(1)解决.对于区间增加的情况,可能需要O(n)解决.好在数据不卡莫队. 1200ms过了. 离线+线段树 760ms过了. # include <cst ...

  2. 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排 状态压缩dp

    题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...

  3. 前端基础:HTML标签(上)

    前端基础:THML HTML初始 1.web服务本质 import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) so ...

  4. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  5. spring任务执行器与任务调度器(TaskExecutor And TaskScheduler)

    对于多线程及周期性调度相关的操作,spring框架提供了TaskExecutor和TaskScheduler接口为异步执行和任务调度.并提供了相关实现类给开发者使用.(只记录采用注解的使用形式,对于X ...

  6. BZOJ3542 DZY Loves March 【map + 线段树】

    题目链接 BZOJ3542 题解 线段树裸题,,对每一行每一列开线段树 由于坐标很大,用\(map\)维护根下标 化一下式子,只用维护区间和,区间平方和,区间存在的个数 #include<alg ...

  7. BZOJ1492: [NOI2007]货币兑换Cash 【dp + CDQ分治】

    1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 5391  Solved: 2181 [Submit][S ...

  8. Educational Codeforces Round 50 (Rated for Div. 2) C. Classy Numbers

    C. Classy Numbers 题目链接:https://codeforces.com/contest/1036/problem/C 题意: 给出n个询问,每个询问给出Li,Ri,问在这个闭区间中 ...

  9. Sightseeing(dijlstar) 计算最短路和次短路的条数

    Sightseeing Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10004   Accepted: 3523 Desc ...

  10. redis缓存在项目中的使用

    关于redis为什么能作为缓存这个问题我们就不说了,直接来说一下redis缓存到底如何在项目中使用吧: 1.redis缓存如何在项目中配置? 1.1redis缓存单机版和集群版配置?(redis的客户 ...