python读取配置文件方式(ini、yaml、xml)


Posted in Python onApril 09, 2020

零、前言

python代码中配置文件是必不可少的内容。常见的配置文件格式有很多中:ini、yaml、xml、properties、txt、py等。

一、ini文件

1.1 ini文件的格式

; 注释内容

[url] ; section名称
baidu = https://3water.com
port = 80

[email]
sender = 'xxx@qq.com'

注意section的名称不可以重复,注释用分号开头。

1.2 读取 configparser

python自带的configparser模块可以读取.ini文件,注意:在python2中是ConfigParser

创建文件的时候,只需要在pychrame中创建一个扩展名为.ini的文件即可。

import configparser

file = 'config.ini'

# 创建配置文件对象
con = configparser.ConfigParser()

# 读取文件
con.read(file, encoding='utf-8')

# 获取所有section
sections = con.sections()
# ['url', 'email']


# 获取特定section
items = con.items('url') # 返回结果为元组
# [('baidu','https://3water.com'),('port', '80')] # 数字也默认读取为字符串

# 可以通过dict方法转换为字典
items = dict(items)

二、yaml配置文件

2.1 yaml文件格式

yaml文件是用来方便读写的一种格式。它实质上是一种通用的数据串行话格式。

它的基本语法如下:

大小写敏感

缩进表示层级关系

缩进时不允许使用Tab,仅允许空格

空格的多少不重要,关键是相同层级的元素要对齐

#表示注释,#后面的字符都会被忽略

yaml支持的数据格式包括:

字典
数组
纯量:单个的,不可再次分割的值

2.1.2 对象

对象是一组组的键值对,使用冒号表示结构

url: https://3water.com
log: 
 file_name: test.log
 backup_count: 5

yaml也允许另外一种写法,将所有的键值对写成一个行内对象

log: {file_name: test.log, backup_count: 5}

2.1.3 数组

一组横线开头的行,组成一个数组。

- cat
- Dog
- Goldfish

转换成python对象是

['cat', 'Dog', 'Goldfish']

数组也可以采用行内写法:

animal: [cat, dog]

转行成python对象是

{'animal': ['cat', 'dog']}

2.1.4 纯量

纯量是最基本,不可分割的值。

数字和字符串直接书写即可:

number: 12.30
name: zhangsan

布尔值用true和false表示

isSet: true
flag: false

null用~表示

parent: ~

yaml允许用两个感叹号表示强制转换

e: !!str 123
f: !!str true

2.1.5 引用

锚点&和别名*,可以用来引用

defaults: &defaults
 adapter: postgres
 host: localhost
 
development: 
 databases: myapp_deveploment
 <<: *defaults

test:
 databases: myapp_test
 <<: *defaults

等同于以下代码

defaults: 
 adapter: postgres
 host: localhost
 
development: 
 databases: myapp_deveploment
 adapter: postgres
 host: localhost

test:
 databases: myapp_test
 adapter: postgres
 host: localhost

&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点

下面是另外一个例子:

- &abc st
- cat
- dog
- *abc

转换成python代码是:

['st', 'cat', 'dog', 'st']

2.2 yaml文件的读取

读取yaml文件需要先安装相应模块。

pip install yaml

yaml文件内容如下:

url: https://www.baidu.com
email:
 send: xxx@qq.com
 port: 25

---
url: http://www.sina.com.cn

读取代码如下:

# coding:utf-8
import yaml

# 获取yaml文件路径
yamlPath = 'config.yaml'

with open(yamlPath,'rb') as f:
 # yaml文件通过---分节,多个节组合成一个列表
 date = yaml.safe_load_all(f)
 # salf_load_all方法得到的是一个迭代器,需要使用list()方法转换为列表
 print(list(date))

三、xml配置文件读取

xml文件内容如下:

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
 <type>War, Thriller</type>
 <format>DVD</format>
 <year>2003</year>
 <rating>PG</rating>
 <stars>10</stars>
 <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
 <type>Anime, Science Fiction</type>
 <format>DVD</format>
 <year>1989</year>
 <rating>R</rating>
 <stars>8</stars>
 <description>A schientific fiction</description>
</movie>
 <movie title="Trigun">
 <type>Anime, Action</type>
 <format>DVD</format>
 <episodes>4</episodes>
 <rating>PG</rating>
 <stars>10</stars>
 <description>Vash the Stampede!</description>
</movie>
<movie title="Ishtar">
 <type>Comedy</type>
 <format>VHS</format>
 <rating>PG</rating>
 <stars>2</stars>
 <description>Viewable boredom</description>
</movie>
</collection>

读取代码如下:

# coding=utf-8
import xml.dom.minidom
from xml.dom.minidom import parse

DOMTree = parse('config.xml')
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
 print("Root element : %s" % collection.getAttribute("shelf"))

# 在集合中获取所有电影
movies = collection.getElementsByTagName("movie")

# 打印每部电影的详细信息
for movie in movies:
 print("*****Movie*****")
 if movie.hasAttribute("title"):
  print("Title: %s" % movie.getAttribute("title"))

 type = movie.getElementsByTagName('type')[0]
 print("Type: %s" % type.childNodes[0].data)
 format = movie.getElementsByTagName('format')[0]
 print("Format: %s" % format.childNodes[0].data)
 rating = movie.getElementsByTagName('rating')[0]
 print("Rating: %s" % rating.childNodes[0].data)
 description = movie.getElementsByTagName('description')[0]
 print("Description: %s" % description.childNodes[0].data)

以上这篇python读取配置文件方式(ini、yaml、xml)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现删除文件与目录的方法
Nov 10 Python
python通过zlib实现压缩与解压字符串的方法
Nov 19 Python
Python表示矩阵的方法分析
May 26 Python
Python3实现的简单验证码识别功能示例
May 02 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
在Python中表示一个对象的方法
Jun 25 Python
python flask几分钟实现web服务的例子
Jul 26 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
Python Json数据文件操作原理解析
May 09 Python
Python中如何引入第三方模块
May 27 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
python数据分析工具之 matplotlib详解
Apr 09 #Python
使用python检查yaml配置文件是否符合要求
Apr 09 #Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 #Python
python实现简单学生信息管理系统
Apr 09 #Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 #Python
pycharm的python_stubs问题
Apr 08 #Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 #Python
You might like
一步一步学习PHP(8) php 数组
2010/03/05 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
Safari5中alert的无限循环BUG
2011/04/07 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
Django Admin 实现外键过滤的方法
2017/09/29 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
python微信好友数据分析详解
2018/11/19 Python
利用python实现AR教程
2019/11/20 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
项目副经理岗位职责
2013/12/30 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
承诺书范本大全
2015/05/04 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python