You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解析存储键值对格式配置文件的正确方法

Python解析类Bash风格配置文件的方法

你这种类Bash的key=value格式配置文件,不用手动循环readline(),Python有更简洁的处理方式,下面给你两种实用方法,从基础手动解析到可选的类型增强:

基础手动解析(最适合新手理解)

直接逐行遍历文件,过滤无效内容后提取键值对存入字典,代码如下:

config = {}
with open("my_config.cfg", "rt") as f:
    for line in f:
        # 去掉每行首尾的空白(换行、空格、制表符都算)
        line_clean = line.strip()
        # 跳过空行和以#开头的注释行
        if not line_clean or line_clean.startswith('#'):
            continue
        # 只按第一个=分割,避免值里包含=符号导致出错
        key, value = line_clean.split('=', 1)
        # 再分别去掉键和值两端的空白(比如key=  value这种情况)
        key = key.strip()
        value = value.strip()
        # 存入字典
        config[key] = value

关键细节说明:

  • 直接for line in f就能逐行读取文件,比手动调用readline()更Pythonic,还能自动处理文件末尾
  • strip()是处理空白的核心,能避免行首行尾的空格、换行符干扰
  • split('=', 1)只分割一次,比如如果值是path=/usr/local/bin=test,也能正确提取键path和值/usr/local/bin=test

可选:自动转换值的类型

如果需要把数字、IP/CIDR转换成对应的数据类型(而不是字符串),可以在存入字典前加类型判断:

config = {}
with open("my_config.cfg", "rt") as f:
    for line in f:
        line_clean = line.strip()
        if not line_clean or line_clean.startswith('#'):
            continue
        key, value = line_clean.split('=', 1)
        key = key.strip()
        value = value.strip()
        
        # 尝试转换为整数
        try:
            value = int(value)
        except ValueError:
            # 整数转换失败,尝试浮点数
            try:
                value = float(value)
            except ValueError:
                # 尝试转换为IP/CIDR(Python3.3+自带ipaddress库)
                try:
                    import ipaddress
                    value = ipaddress.ip_network(value, strict=False)
                except (ValueError, ImportError):
                    # 都不是就保持字符串
                    pass
        config[key] = value

这样处理后,config['keyword1']如果是数字就会是int/float类型,IP/CIDR会变成ipaddress对象,方便后续操作。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:55:23