Python读配置文件(json)

选择适合自己的文件格式

尝试了ini和json,选择了json。读json后可以赋值给字典变量,结构更灵活,同时方便对无效参数预处理。
这两个库不需要安装import后可以直接用

读ini

import configparser

读json

import json

有些老师推荐我使用yaml和toml,尤其是toml,可读性更好,但我考虑到这两个需要三方库支持,为了比较不必要的麻烦。ini不适合保存复杂的结构,所以我最后还是选择了json,适合自己的是最好的。

读json格式配置文件的具体操作

注意:json中有中文,读文件时要选择相应的字符集

比如下面示例中的json文件中包有中文,而且GBK

附:config.json的内容

注意:要用用双引号

{
  "学生": {
    "N01": {
      "姓名": "张三",
      "年龄": 19
    },
    "N02": {
      "姓名": "张三",
      "年龄": 19
    }
  }
}

读配置文件

 解读:encoding='GBK',GBK是json文件的字符集,这里要与json文件保持一致,无需指定py文件的字符集,会自动转换

'''
读配置文件,建议用json,可以赋值给字典变量,结构更灵活,同时方便对无效参数预处理
'''
import json

with open('config.json', 'r', encoding='GBK') as config_j:
    cfg=json.load(config_j)
print(cfg)
print(cfg.get('老师','无效参数'))
print(cfg['学生'].get('N03',{'姓名':'未登记','年龄':'未知'}))
'''
#输出结果
{'学生': {'N01': {'姓名': '张三', '年龄': 19}, 'N02': {'姓名': '张三', '年龄': 19}}}
无效参数
{'姓名': '未登记', '年龄': '未知'}

'''

 

 

Python 中,有多种方法可以读取 JSON 配置文件,以下是几种常见的方式: ### 使用内置的 `json` 模块 这是最常见和简单的方法,适用于大多数情况。以下是一个示例代码: ```python import json def read_config(): with open(r"D:\\work\\Python_Vs\\bianli\\bianli\\XMconfig.json") as json_file: config = json.load(json_file) return config config = read_config() ``` 此代码定义了一个 `read_config` 函数,用于打开并读取指定路径的 JSON 文件,将其内容加载为 Python 对象并返回 [^2]。 ### 从环境变量中读取 JSON 数据 若希望从环境变量中读取 JSON 数据,可以考虑使用第三方库 `python - dotenv`,不过引用中未给出具体代码示例。基本思路是先安装 `python - dotenv` 库,然后在代码中加载环境变量,再对其中的 JSON 数据进行解析。 ### 解析不同格式的配置文件(包括 JSON) 若需要解析不同格式的配置文件,包括 JSON,可以选择使用 `configparser`,但引用中同样未给出详细示例。`configparser` 通常用于解析 `.ini` 格式的配置文件,对于 JSON 文件,可结合 `json` 模块使用。 ### 流式读取 `json.gz` 文件 如果是 `json.gz` 格式的压缩文件,可以使用以下方式流式读取: ```python import gzip import json # 数据路径 path = "C:\\data.json.gz" # 流式读取函数 def parse(path): g = gzip.open(path, 'rb') for l in g: yield json.loads(l) # 读取每条数据 for d in parse(path): print(d) ``` 这段代码定义了一个 `parse` 函数,使用 `gzip` 模块打开压缩文件,并逐行读取文件内容,将每行内容解析为 JSON 对象并通过生成器返回 [^3]。 ### 封装成类的读取方式 以下代码将读取和写入 JSON 配置文件的操作封装成了一个类: ```python import json import os class JsonConf: '''json配置文件类''' @staticmethod def store(data): with open("config.json", 'w') as json_file: json_file.write(json.dumps(data, indent=4)) @staticmethod def load(): if not os.path.exists('config.json'): with open("config.json", 'w') as json_file: pass with open('config.json') as json_file: try: data = json.load(json_file) except: data = {} return data @staticmethod def set(data_dict): json_obj = JsonConf.load() for key in data_dict: json_obj[key] = data_dict[key] JsonConf.store(json_obj) print(json.dumps(json_obj, indent=4)) if __name__ == "__main__": data = {"a": " 1", "f": "100", "b": "3000"} JsonConf.set(data) ``` 这个 `JsonConf` 类包含了存储、加载和更新 JSON 配置文件的静态方法 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值