在python中实现自定义配置文件解析及应用技巧[yaml and ConfigParser]

简介:

给大家介绍下两个库哈ConfigParser和yaml ,这俩主要是实现配置文件解析的。


前沿:

这段时间同事做项目,我发现有一些个全局配置或者平台的主配置文件,都是写在一个模块里面的。 这也太不专业和太专业了。。。 不专业在与,python有很多这样的配置文件解析的模块。 太专业在于,每次改全局配置都要在xxx.py修改。。。给人的感觉不爽。。。


我一般是咋用的:

脚本的配置变量的解析修改 ! 说的通俗点,我跑一个脚本,不用在脚本的后面加上一堆的参数,可以直接在配置文件里修改线程数目, 绑定的ip地址这些个常量。。。 我有的时候,需要两个独立进程的变量交互,也可以用yaml,当然这个方法有点搓,但也是一种好实现的方法。。。。



先说yaml~

现在好多的配置文件也都在用这个,比如牛逼的saltsatck 集群配置用的就是yaml !!!


YAML是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash的数据时是很简单有效的。


YAML 简述

  • YAML的可读性好。

  • YAML和脚本语言的交互性好。

  • YAML使用实现语言的数据类型。

  • YAML有一个一致的信息模型。

  • YAML易于实现。

  • YAML可以基于流来处理;

  • YAML表达能力强,扩展性好。

  • YAML语法简单 Structure通过空格来展示,Sequence里的项用"-"来代表,Map里的键值对用":"分隔。

  • 目前现有的语言实现广泛:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是脚本语言


介绍完yaml~ 咱们开始搞起

第一步安装

094327366.png

yaml的配置文件 ~


1
2
3
4
5
6
7
8
9
10
11
12
name: xiaorui
age:  18
spouse:
     name: mm
     age:  25
sb:
  -  name: shencan
    age:  11
  -  name1: dehua
    age1:  12
  -  name2: qiaofeng
    age1:  13


关于yaml的执行文件 ~

open是打开一个配置文件,load是加载这个配置文件

1
2
3
4
5
#coding:utf-8
import  yaml
=  open ( 'kk.yaml' )
=  yaml.load(f)
print  x

094444553.png


我们再继续的拆分,其实大家都懂的。。。

095219917.png


配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser !!!


咱们常见的ini配置文件就可以用 configparser !!!

安装 configparser 模块

103345149.png

configparser的配置文件

103357451.png


python.py ~


1.基本的读取配置文件
-read(filename) 直接读取ini文件内容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到该section的所有option
-items(section) 得到该section的所有键值对
-get(section,option) 得到section中option的值,返回为string类型
-getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。


2.基本的写入配置文件
-add_section(section) 添加一个新的section
-set( section, option, value) 对section中的option进行设置,需要调用write将内容写入配置文件。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#coding:utf- 8
import  ConfigParser
cf = ConfigParser.ConfigParser()
#read config
cf.read( "test.conf" )
return  all section
secs = cf.sections()
print  'sections:' , secs
opts = cf.options( "db" )
print  'options:' , opts
kvs = cf.items( "gg" )
print  'sec_a:' , kvs
#read by type
str_val = cf. get ( "db" "db_host" )
print  "value for sec_a's a_key1:" , str_val
#write config
#update value
#我这里要更新的
cf. set ( "db" "db_host" "10.10.10.1" )
#我这里新增加的一条
# set  new  value
cf. set ( "db" "weburl" "xiaorui.cc" )
#create a  new  section
#我这里新加的一个段落
cf.add_section( 'new-duanluo' )
cf. set ( 'a_new_section' 'new_key' 'new_value' )
#write back to configure file
cf.write(open( "test.conf" "w" ))



103908462.png


要是觉得复杂,可以看看这个小例子:

conf文件

1
2
3
4
5
6
7
8
[DB]
host= 127.0 . 0.1
name=mydb
user=root
pwd=testpwd
[TH]
thread= 5
timeout= 30

python文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#coding=utf- 8
import  ConfigParser
cf = ConfigParser.ConfigParser()
cf.read( 'conf.ini' ) #另个方法是cf.readfp(fp) fp是已打开的文件对象
# 列出所有sections
sec = cf.sections()
print sec
#列出[TB]下的options
pos = cf.options( "TH" )
print pos
#直接读取配置值
print cf. get ( "DB" , "host" )  #不要与字典的 get ()混淆哦
print cf. get ( "DB" , "name" )
print cf. get ( "DB" , "user" )
print cf. get ( "DB" , "pwd" )
print cf.getint( "TH" , "thread" ) #getint()返回的是整型
print cf.getint( "TH" , "timeout" )




看到结果了吧。。。 改变了值和新增了一个段落 !




 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1314362,如需转载请自行联系原作者



相关文章
|
6月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
1513 2
|
5月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
951 68
|
6月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
190 4
|
7月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
236 0
|
8月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
8月前
|
编译器 Python
如何利用Python批量重命名文件
本文介绍了如何使用Python和PyCharm对文件进行批量重命名,包括文件名前后互换、按特定字符调整顺序等实用技巧,并提供了完整代码示例。同时推荐了第三方工具Bulk Rename Utility,便于无需编程实现高效重命名。适用于需要处理大量文件命名的场景,提升工作效率。
|
9月前
|
编解码 Prometheus Java
当Python同时操作1000个文件时,为什么你的CPU只用了10%?
本文介绍如何构建一个高效的文件处理系统,解决单线程效率低、多线程易崩溃的矛盾。通过异步队列与多线程池结合,实现任务调度优化,提升I/O密集型操作的性能。
203 4
|
8月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
1877 0
|
8月前
|
数据管理 开发工具 索引
在Python中借助Everything工具实现高效文件搜索的方法
使用上述方法,你就能在Python中利用Everything的强大搜索能力实现快速的文件搜索,这对于需要在大量文件中进行快速查找的场景尤其有用。此外,利用Python脚本可以灵活地将这一功能集成到更复杂的应用程序中,增强了自动化处理和数据管理的能力。
646 0
|
8月前
|
数据采集 监控 算法
Python文件与目录比较全攻略:从基础操作到性能优化
文件比较的核心在于数据指纹校验,通过逐字节比对生成唯一标识,确保内容一致性。从标准库的os与filecmp到高性能第三方库如pydiffx,再到分布式与量子加密技术的未来趋势,文件比较广泛应用于数据备份、代码审查与系统监控等领域,是保障数据完整性的关键技术手段。
174 0

热门文章

最新文章

推荐镜像

更多