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 list切片原理
Oct 27 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python Series从0开始索引的方法
Nov 06 Python
python根据url地址下载小文件的实例
Dec 18 Python
Python使用while循环花式打印乘法表
Jan 28 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
python支持多继承吗
Jun 19 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 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学习之PHP变量
2006/10/09 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
python实现SOM算法
2018/02/23 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
宣传策划类求职信范文
2014/01/31 职场文书
工程采购员岗位职责
2014/03/09 职场文书
十八届三中全会感言
2014/03/10 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
邀请书格式范文
2015/02/02 职场文书
实用求职信模板范文
2019/05/13 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android
python 使用pandas读取csv文件的方法
2022/12/24 Python