Python3中常见配置文件写法汇总
作者:Carl_奕然 发布时间:2022-01-21 11:14:07
1、引言
小鱼:小 * 丝,走啊,出去撸串啊,
小 * 丝:没时间啊,鱼哥
小鱼:嗯??? 啥事情让你忙的撸串都不去了
小 * 丝:我的BOSS让我写一个自动化平台,但是我不知道这些参数放在**.py文件里面,还是放在配置文件**里面。
小鱼:就因为这个?
小 * 丝:对啊,
小鱼:唉…我还以为啥事呢, 放在配置文件里。
小 * 丝:但是,我对配置文件写法不太熟(尴尬的一批)…
小鱼:… 每次都上当, 当当不一样。
小 * 丝:嘿嘿… 这不是要向你学习嘛。
小鱼:… 为了撸串,认了。
2、配置文件写法
关于配置文件的写法, 常用的 大致有:
- ini
- json
- toml
- yaml
接下来,我们就详细聊一聊 这四种常用配置文件的写法。
2.1 ini
ini 即 Initialize ,最早是在 Windows 上配置文件的存储格式。
ini 文件的写法通俗易懂,往往比较简单,通常由节(Section)、键(key)和值(value)组成,就像以下形式
localdb.ini
[localdb]
Host = 127.0.0.1
user = root
password = 888888
port = 3306
database = mysql
Python 本身内置的 configparser 标准库,我们直接就可以用来对 ini 文件进行解析。
如我们将上述内容保存在一个名为 test1.ini 的文件中,然后使用 read() 方法来进行解析和读取,最后通过 items() 方法来获取指定节点下的所有键值对。
代码示例:
# -*- coding:utf-8 -*-
# @Time : 2022-08-04
# @Author : Carl_DJ
from configparser import ConfigParser
cfg = ConfigParser()
db_path= cfg.read("D:\Project\Project\localdb.ini")
#配置文件路径
print(f"配置文件路径:{db_path}")
db_msg = cfg.items("localdb")
#配置文件内容
print(f"配置文件内容:{db_msg}")
运行结果
配置文件路径:['D:\\Project\\Project\\localdb.ini']
配置文件内容:{'host': '127.0.0.1', 'user': 'root', 'password': '888888', 'port': '3306', 'database': 'mysql'}
注意点
configparser 默认将值以字符串的形式呈现。
上面代码,获取到键值对后,我们再来转换成字典,然后再进行传参。
代码示例
# -*- coding:utf-8 -*-
# @Time : 2022-08-04
# @Author : Carl_DJ
from configparser import ConfigParser
import pymysql
cfg = ConfigParser()
db_path= cfg.read("D:\Project\Project\localdb.ini")
#配置文件路径
#print(f"配置文件路径:{db_path}")
#对内容转换成字典
db_msg = dict(cfg.items("localdb"))
#链接数据库
con = pymysql.connect(**db_msg)
2.2 json
看到json,不要惊讶, 因为json也可以以配置文件存在的。
例如:
npm(JavaScript 包管理工具类似 Python 的 pip)、
微软出品的目前被广泛使用的 VSCode 编辑器
都使用 json 编写配置参数。
当然 json也是python标准库。
我们通过load() 和loads()方法来导入文件式和字符串的 json 内容。
localdb.json
{
"localdb":{
"host": "127.0.0.1",
"user": "root",
"password": "888888",
"port": 3306,
"database": "mysql"
}
}
代码示例
# -*- coding:utf-8 -*-
# @Time : 2022-08-04
# @Author : Carl_DJ
import json
from pprint import pprint
with open("D:\Project\Project\localdb.json") as js:
cfg = json.load(js)['localdb']
#以json格式输出
pprint(cfg)
运行结果:
{'database': 'mysql',
'host': '127.0.0.1',
'password': '888888',
'port': 3306,
'user': 'root'}
2.3 toml
toml 格式(或 tml 格式)是 Github 联合创始人 Tom Preston-Werner 所提出的一种配置文件格式。
toml 格式:
从样例中可以看出,toml 有点类似于前面所讲的 ini 文件。但是它比 ini 扩展了更多的内容。
当然,如果要使用toml,就需要先安装。
老规矩:
pip install toml
其它安装方式,直接看这两篇:
Python3自动安装第三方库,跟pip说再见
Python:一行代码,导入Python所有库
localdb.toml
[mysql]
host = "127.0.0.1"
user = "root"
port = 3306
database = "test"
[mysql.parameters]
pool_size = 5
charset = "utf8"
[mysql.fields]
pandas_cols = [ "id", "name", "age", "date"]
代码示例
# -*- coding:utf-8 -*-
# @Time : 2022-08-04
# @Author : Carl_DJ
import toml,os
from pprint import pprint
cfg = toml.load(os.path.expanduser("D:\Project\Project\localdb.toml"))
pprint(cfg)
运行结果
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameters': {'charset': 'utf8', 'pool_size': 5},
'port': 3306,
'user': 'root'}}
可以看到 toml 文件被间接地转化成了字典类型。
2.4 yaml
yaml 格式(或 yml 格式)是目前较为流行的一种配置文件,它早在 2001 由一个名为 Clark Evans 的人提出;
同时它也是目前被广泛使用的配置文件类型,典型的就是 Docker 容器里的 docker-compose.yml 配置文件。
YAML 官方早已经提供了相应的 Python 库进行支持,即 PyYAML,
所以,第一步,需要安装
pip install pyyaml
用法:
与 json 库和 toml 库一样,通过 load() 方法来进行加载。
但是,考虑到安全性, 所以,最好是使用 safe_load() 来代替 load() 方法
localdb.yaml
mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: "888888"
database: "test"
parameter:
pool_size: 5
charset: "utf8"
fields:
pandas_cols:
- id
- name
- age
- date
代码示例:
# -*- coding:utf-8 -*-
# @Time : 2022-08-04
# @Author : Carl_DJ
import os
from pprint import pprint
with open("D:\Project\Project\localdb.json") as ya:
cfg = yaml.safe_load(ya)
pprint(cfg)
运行结果:
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameter': {'charset': 'utf8', 'pool_size': 5},
'password': '888888',
'port': 3306,
'user': 'root'}}
可以看到最后结果和前面的 toml 库的解析结果基本一致。
3、总结
看到这里,今天的分享差不多就完事了。
今天共分享了四种读取配置文件的方式:
ini
json
toml
yaml
其实在实际工作中, 只需要掌握一种或者两种方式,即可。
当然,如果要扩展自己的知识库,那就需要多掌握几种,
毕竟谁会嫌弃自己的知识储备量少呢?
来源:https://blog.csdn.net/wuyoudeyuer/article/details/126152209
猜你喜欢
- 在一些特殊的业务场景中,我们需要一次性提取一张图片中的色卡信息,并且需要使用十六进制的颜色表示方法进行展示。今天得空做了一个小工具,用来自定
- phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。 危险等级:中 passthru() 功能描述:允许
- 这篇文章主要介绍了如何获取Python简单for循环索引,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- # encoding: UTF-8import threadimport time# 一个用于在线程中执行的函数def func():&nb
- 原来图片自适应宽度一般都是通过Javascript来解决的,但是多少还是比较麻烦。还有一种通过设置外层容器overflow:hidden属性
- 代码如下:'返回指定文件夹中文件的数目,传入值为被检测文件夹的硬盘绝对路径 function CountFile
- 学习Python的过程中,我们会遇到Excel的读写问题。这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Exc
- seaborn是python中的一个非常强大的数据可视化库,它集成了matplotlib,下图为seaborn的官网,如果遇到疑惑的地方可以
- 这次主要介绍字符串常用操作方法及例子1.python字符串在python中声明一个字符串,通常有三种方法:在它的两边加上单引号、双引号或者三
- 这个函数是前几年刚流行小偷程序的时候,偶写来用于小偷程序中截取代码的;可能有些朋友在我以前的代码中看见过了,但没有写用法,现在把调用方法及使
- 前言:opencv最主要的的功能是用于图像处理,所以图像的概念贯穿了整个opencv,与其相关的核心类就是Mat。像素:图片尺寸以像素为单位
- 在进行数据操作时,经常会根据条件批量的修改数据,如以下数据,按照日期的条件,将部门日期下的promotion改为1tot_qtypriced
- numpy作为python科学计算的基础模块,支撑起了pandas、matplotlib等使用。其中,ndarray作为numpy的重要
- 目录1、方式一:自动创建2、方式二:纯手动创建3、方式三:半自动创建1、方式一:自动创建# django orm 自动帮我们创建第三张表,我
- 在FF下,如果内容含有FLASH,FLASH不会被隐藏掉,做为变通,我在收缩完成之后,将生成的内容容器隐藏掉了。<!DOCTYPE h
- 已知有一个XML文件(bookstore.xml)如下:<?xml version="1.0" encoding=
- Python中的三引号,3个单引号及3个双引号实际上3个单引号和3个双引号不经常用,但是在某些特殊格式的字符串下却有大用处。通常情况下我们用
- 1.网络爬虫的基本概念网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的
- 1、冒泡排序法让列表中的一项和下一项作比较,若前一项大于后一项则交换两者位置(升序)。方法一:直接使用for循环L=[8,2,50,3]fo
- 1、使用说明首先说明,本文所使用的功能为pycharm专业版所支持,其他版本如社区版,教育版,则不一定支持。作为一名后端开发,我猜你的桌面上