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抓取网页图片并放到指定文件夹
Apr 24 Python
Python查看多台服务器进程的脚本分享
Jun 11 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
Python中的asyncio代码详解
Jun 10 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
djano一对一、多对多、分页实例代码
Aug 16 Python
解决Python使用列表副本的问题
Dec 19 Python
python2.7使用scapy发送syn实例
May 05 Python
解决tensorflow/keras时出现数组维度不匹配问题
Jun 29 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
Prometheus开发中间件Exporter过程详解
Nov 30 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_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
浅析javascript 定时器
2014/12/23 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
pyqt和pyside开发图形化界面
2014/01/22 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
Django ModelForm操作及验证方式
2020/03/30 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
关于Python错误重试方法总结
2021/01/03 Python
广州盈通面试题
2015/12/05 面试题
质量工程师岗位职责
2013/11/16 职场文书
应用英语专业自荐信
2014/01/26 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
环保志愿者活动方案
2014/08/14 职场文书
教师节晚会主持词
2015/06/30 职场文书
初中毕业生感言
2015/07/31 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL