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 接口测试response返回数据对比的方法
Feb 11 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
python如何使用unittest测试接口
Apr 04 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
python读写csv文件的方法
Aug 13 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
使用python turtle画高达
Jan 19 Python
Python Django搭建文件下载服务器的实现
May 10 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
python ConfigParser库的使用及遇到的坑
Feb 12 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
通过文字传递创建的图形按钮
2006/10/09 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python路径的写法及目录的获取方式
2019/12/26 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
python3 logging日志封装实例
2020/04/08 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
Shell编程面试题
2016/05/29 面试题
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
工厂采购员岗位职责
2014/04/08 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js