Python | 配置文件的创建、读取及更新

本文为 .py 文件创建配置文件,读取及更新配置文件内容进行不完全总结 12

Updated: 2022 / 8 / 11



应用场景

有些自动化脚本要反复使用,但是每次使用都有一些参数要改,比如路径、时间间隔等等。
每次打开源文件改这些参数时免不了看到大片的代码,因此可以借助配置文件来保存这些可能要人工修改的参数。

截至目前,可以使用的配置文件的文件类型有 init, json, tomlyaml


配置文件

ini

概念

.ini 文件是 Initialization File 的缩写,即初始化文件,是 windows 的系统配置文件所采用的存储格式,统管 windows 的各项配置。


语法

.ini 文件通常由 节(Section)键(key)值(value) 组成。具体形式如下:

; 关于mysql的一个小配置
; db.ini
[mysql]
host = 127.0.0.1
port = 3306
user = root
password = 123456
database = test

使用

使用 python 内置的 configparser 标准库进行解析 ini 文件。

方法含义
read()读取文件内容
items()获取指定节的所有键值对

json

概念

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。


语法

它的语法格式的示例如下:

{
    "mysql": {
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "123456",
        "database": "test"
    }
}

使用

使用 python 内置的 json 标准库进行解析。

方法含义
loadsjson 文件中读取 json 格式数据
loads将字符串类型数据转化为 json 格式数据
dumpjson 格式数据保存到文件
dumpsjson 格式数据保存为字符串类型

示例

创建 config.json, 如下所示:

{
    "target_dir" = "E:/data",
    "interval_mins" = 5,
    "time_record" = "201904011230"
}

在你的 main.py 中增加两个函数分别用于读取和更新配置文件 config.json

def read_config():
    """"读取配置"""
    with open("config.json") as json_file:
        config = json.load(json_file)
    return config

def update_config(config):
    """"更新配置"""
    with open("config.json", 'w') as json_file:
        json.dump(config, json_file, indent=4)
    return None

当通过 config = read_config() 获得的配置 config 是一个字典,不能直接使用如 target_dir 等键值当做变量使用,可以间接用如 config["target_dir"] 来当变量,但并不方便。通常做法是每个变量执行一次类似 target_dir = config["target_dir"] 的操作,如果配置变量较多就比较累了。

那么,重点来了:

globals().update(config)

globals() 获得(模块级)全局变量所组成的字典,它的 .update() 方法将字典内容转为变量,修改该字典等同修改全局变量。举个例子:

a_dict = {"key": "value"}
globals().update(a_dict)
print(key)
# value

虽然没有显式定义变量 key,但依然可以正确输出 value

重点结束。

修改字典 config 后,只要 update_config(config),就实现了配置文件 config.json 的更新,可以说是非常简单了。


toml

概念

TOMLGithub 联合创始人 Tom Preston-Werner 所提出的一种配置文件格式,是一种旨在成为一个小规模、易于使用的语义化的配置文件格式,它被设计为可以无二义性的转换为一个哈希表。


语法

TOML 的语法广泛地由 key = "value"[节名]#注释 构成。
支持以下数据类型:字符串、整形、浮点型、布尔型、日期时间、数组和图表。


使用

创建 config.toml, 如下所示:

# config.toml
[mysql]
    [mysql.config]
    host     = "127.0.0.1"
    user     = "root"
    port     = 3306
    password = "123456"
    database = "test"

    [mysql.parameters]
    pool_size = 5
    charset   = "utf8"

    [mysql.fields]
    course_cols = ["cno", "cname", "ccredit", "cdept"]

使用外部库 toml 解析 toml 文件,
在你的 main.py 中增加两个函数分别用于读取和更新配置文件 config.toml

def read_config():
    """"读取配置"""
    with open("config.toml") as toml_file:
        config = toml.load(toml_file)
    return config

def update_config(config):
    """"更新配置"""
    with open("config.toml", 'w') as toml_file:
        toml.dump(config, toml_file)
    return None

比如,使用 read_config() 函数读取 config.toml 文件所读取到的内容如下所示:

{
    "mysql": {
        "config": {
            "host": "127.0.0.1",
            "user": "root",
            "port": 3306,
            "password": "123456",
            "database": "test"
        },
        "parameters": {
            "pool_size": 5,
            "charset": "utf8"
        },
        "fields": {
            "course_cols": [
                "cno",
                "cname",
                "ccredit",
                "cdept"
            ]
        }
    }
}

yaml

概念

YAML ( YAML Ain't a Markup Language, YAML 不是一种标记语言) 格式是目前较为流行的一种配置文件,它早在 2001 由一个名为 Clark Evans 的人提出;同时它也是目前被广泛使用的配置文件类型。


语法

它的语法格式的示例如下:

# db.yaml
mysql:
  config:
    host: "127.0.0.1"
    port: 3306
    user: "root"
    password: ""
    database: "stu_sys"
  
  parameters:
    pool_size: 5
    charset: "utf8"

  fileds:
    course_cols:
      - cno
      - cname
      - ccredit
      - cdept

使用

使用外部库 pyyaml 解析 yaml 文件,
在你的 main.py 中增加两个函数分别用于读取和更新配置文件 config.yaml

def read_config():
    """"读取配置"""
    with open("config.yaml") as yaml_file:
        config = yaml.safe_load(yaml_file)
    return config

def update_config(config):
    """"更新配置"""
    with open("test.yaml", 'w') as yaml_file:
        yaml.dump(config, yaml_file)
    return None

比如,使用 read_config() 函数读取 config.yaml 文件所读取到的内容如下所示:

{
    "mysql": {
        "config": {
            "host": "127.0.0.1",
            "port": 3306,
            "user": "root",
            "password": "",
            "database": "stu_sys"
        },
        "parameters": {
            "pool_size": 5,
            "charset": "utf8"
        },
        "fileds": {
            "course_cols": [
                "cno",
                "cname",
                "ccredit",
                "cdept"
            ]
        }
    }
}

参考链接


  1. Python3.用json作为配置文件 ↩︎

  2. python四种配置文件 ↩︎

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值