• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用

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

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

    json

    概念

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


    语法

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

    {
        "mysql": {
            "host": "127.0.0.1",
            "port": 3306,
            "user": "root",
            "password": "123456",
            "database": "test"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    使用

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

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

    示例

    创建 config.json, 如下所示:

    {
        "target_dir" = "E:/data",
        "interval_mins" = 5,
        "time_record" = "201904011230"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在你的 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    那么,重点来了:

    globals().update(config)
    
    • 1

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

    a_dict = {"key": "value"}
    globals().update(a_dict)
    print(key)
    # value
    
    • 1
    • 2
    • 3
    • 4

    虽然没有显式定义变量 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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    使用外部库 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    比如,使用 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"
                ]
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    使用

    使用外部库 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    比如,使用 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    参考链接


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

    2. python四种配置文件 ↩︎

  • 相关阅读:
    PHP多功能投票微信小程序系统源码
    骑行用什么蓝牙耳机好?骑行骨传导耳机推荐
    Android 发布自己的sdk
    Vue3 基础 – 快速上手 & 常用指令
    Rust学习02:推荐一本入门书,免费的
    Vue3组件库打包指南,一次生成esm、esm-bundle、commonjs、umd四种格式
    【刷题】代码随想录算法训练营第二十二天|235、二叉搜索树的最近公共祖先,701、二叉搜索树中的插入操作,450、删除二叉搜索树中的节点
    计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统
    基于JAVA校园环境保护监督系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    Django实现音乐网站 (21)
  • 原文地址:https://blog.csdn.net/MissMango0820/article/details/126286655