python之配置文件toml
toml是一个优秀的配置文件格式 和python天然契合 首先他的格式和python非常类似 不只是列表,字符串,int,包括datetime格式都可以完美识别 比如我们新建一个config.toml文件
#这是一个toml文件 name = 'useradd' age = 59 sex = 'femle' hobbies = ['reading','writing','coding'] today = 2025-03-11
我们可以直接从python中读取这个文件
不过需要注意的是 如果你的python是3.11以后的版本,那么你可以直接使用import tomllib .如果是之前的版本就需要pip install toml .这也说明python官方也认可了toml作为配置文件的优越性.
我们来新建一个python文件打开这个toml文件
import tomllib with open('config.toml', 'rb') as f: config = tomllib.load(f) print(config) #得到一个字典 {'name': 'useradd', 'age': 59, 'sex': 'femle', 'hobbies': ['reading', 'writing', 'coding'], 'today': datetime.date(2025, 3, 11)} #可以看出我们的配置文件信息都被读取了过来,而且是按照我们设想的格式
这是简单的方式,下面我们开始进入高级一些的模式
首先是 [] 方括号 比如我在配置文件里这样写
[account] bilibili = 'paulbili' youku = 'paulyouku'
那么在python中读取配置文件的时候就会读到
{'account': {'bilibili': 'paulbili', 'youku': 'paulyouku'}}
如果我们要在一个配置项下面加多个值 我们可以用.来做
我们可以这样
[account] bilibili.username = 'paulbili' bilibili.password = '123456' youku = 'paulyouku'
这样py读取到的值就是
{'account': {'bilibili': {'username': 'paulbili', 'password': '123456'}, 'youku': 'paulyouku'}}
我们也可以用合并同类项的写法来这么写
[account] #bilibili = 'paulbili' youku = 'paulyouku' [account.bilibili] username = 'paulbili' password = '123456'
这样py获取到的内容是.基本一样,但是下面这种写法,在用户回头检阅的时候,更加易读一些.
{'account': {'youku': 'paulyouku', 'bilibili': {'username': 'paulbili', 'password': '123456'}}}
对于同类项,也就是列表中的字典 toml可以这样写
[[account]] name = 'bilibili' user = 'paulbli' password = '123456' [[account]] name = 'youku' user = 'paulyouku' password = '123456'
读取出来是这样 都是account下的 然后只要是account下的就单独是一个字典
{'account': [{'name': 'bilibili', 'user': 'paulbli', 'password': '123456'}, {'name': 'youku', 'user': 'paulyouku', 'password': '123456'}]}
如何使用:
如果我先定义了一个toml文件 里面有这样的内容
[account] username = 'bilib' password = 'hahaha'
我们定义一个读取toml的中间文件 rd_config.py
import tomllib import os script_dir = os.path.dirname(os.path.abspath(__file__)) configpath = os.path.join(script_dir, 'config.toml') try: with open(configpath, 'rb') as f: config = tomllib.load(f) except Exception as e: config = e print(e)
需要注意的是为了能在任何地方调用这个配置文件,我们需要用os定义绝对路径,否则会报错
我们在任何文件中就可以这样读取这个配置
from re_config import config a = config.get('account').get('username') print(a)
#得到 bilib
如果还有一个这样的嵌套配置文件比如
[[account]] name = 'bilibili' user = 'paulbli' password = '123456' [[account]] name = 'youku' user = 'paulyouku' password = '123456'
那我们可以在读取toml的中间文件 rd_config.py中定义一个函数
def get_username(config1,config2,config3,config4): try: with open('config.toml', 'rb') as f: config = tomllib.load(f) for i in config.get(config1): if i.get(config2) == config3: return i.get(config4) except Exception as e: print(e)
然后我们在任意文件中只要调用这个函数 get_username
from No1 import get_username
a = get_username('account','name','bilibili','user')
print(a)
#就可以得到 paulbli
那么到这里差不多配置文件toml就介绍完毕了.在我们做项目的时候,要把一些变量都习惯写在配置文件里,这样可以尽量的减少代码维护的难度.