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
相关产品推荐
相关产品推荐

