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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
python根据文件大小打log日志
Oct 09 Python
Python sys.argv用法实例
May 28 Python
深入学习Python中的上下文管理器与else块
Aug 27 Python
Python实现的双色球生成功能示例
Dec 18 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
Python基本socket通信控制操作示例
Jan 30 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 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
解决中英文字符串长度问题函数
2007/01/16 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
详解jQuery中的prop()使用方法
2020/01/05 jQuery
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
浅谈Python NLP入门教程
2017/12/25 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
代码详解django中数据库设置
2019/01/28 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
便利店投资的创业计划书
2014/01/12 职场文书
四年级语文教学反思
2014/02/05 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python