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就介绍完毕了.在我们做项目的时候,要把一些变量都习惯写在配置文件里,这样可以尽量的减少代码维护的难度.

 

posted @ 2025-03-11 19:31  叶无齐  阅读(617)  评论(0)    收藏  举报

python学习之路

[python随笔]