如何在Python 3的ConfigParser中用分隔符解析一个键的多值?
用分隔符实现ConfigParser解析多值
当然可以通过设置分隔符来实现一个键对应多个值,而且不需要依赖JSON库,不过要注意选择不会和值本身包含的字符冲突的分隔符,避免解析出错。
推荐方案:使用无冲突的分隔符
比如选择分号;或者竖线|这类不会出现在URL中的符号作为分隔符,配置文件写法如下:
[sites] urls=https://google.com;https://yahoo.com;https://gmail.com
对应的Python代码:
from configparser import ConfigParser config = ConfigParser() config.read('你的配置文件名.ini') # 读取值并按分隔符分割成列表 urls_list = config.get('sites', 'urls').split(';') print(urls_list) # 输出结果:['https://google.com', 'https://yahoo.com', 'https://gmail.com']
不推荐:用冒号作为分隔符
如果一定要用冒号,会遇到URL本身包含冒号(https://里的)的问题,直接分割会把单个URL拆碎。即使转义URL里的冒号,处理起来也很繁琐,比如你提供的配置:
[sites] urls=https\://google.com:https\://yahoo.com:https\://gmail.com
读取后需要先还原转义字符,再用特殊方式分割(不能直接按冒号split),代码会变得复杂:
from configparser import ConfigParser config = ConfigParser() config.read('你的配置文件名.ini') raw_value = config.get('sites', 'urls') # 先还原转义的:// processed_value = raw_value.replace('\://', '://') # 通过拆分前缀的方式提取完整URL urls_list = [f'https://{part}' for part in processed_value.split('https://')[1:]] print(urls_list)
这种方式容易引发意外问题,所以更推荐用无冲突的分隔符。
内容的提问来源于stack exchange,提问作者Vinicius Gonçalves Melo
相关产品推荐
相关产品推荐

