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时区设置方法与pytz查询时区教程
Nov 27 Python
Python通过websocket与js客户端通信示例分析
Jun 25 Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
详解Python中的四种队列
May 21 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 Python
python实现同一局域网下传输图片
Mar 20 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
python 爬取英雄联盟皮肤并下载的示例
Dec 04 Python
python中四舍五入的正确打开方式
Jan 18 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 autoload机制的详解
2013/06/09 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
JS实现滑动插件
2020/01/15 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
在Python下尝试多线程编程
2015/04/28 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
计算机专业自我鉴定
2013/10/15 职场文书
酒店经理职责
2014/01/30 职场文书
法定代表人证明书
2014/11/28 职场文书
英文商务邀请函范文
2015/01/31 职场文书
社区文明倡议书
2015/04/28 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers
MySQL 开窗函数
2022/02/15 MySQL
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android