You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用configparser将字典列表转换为JSON配置文件的实现方案及报错解决

使用configparser实现类似JSON的配置生成并解决TypeError问题

你遇到的这个报错很典型——configparser是基于传统INI文件格式设计的,它要求所有配置项的值必须是字符串类型,直接传入Python列表肯定会触发类型错误。要实现类似你用JSON生成的配置效果,我们需要先把列表序列化(转换成字符串),读取时再反序列化回列表就行,下面给你两种实用的方案:

方案1:用逗号分隔字符串存储列表

这是最简单的方式,适合元素里不含逗号的场景:

写入配置文件的代码

import configparser

config = configparser.ConfigParser()
config.add_section("Queries")

# 把列表转为逗号分隔的字符串
config.set("Queries", "Header1", ",".join(["query1","query2","query3","query4","query5","query6"]))
config.set("Queries", "Header2", ",".join(["query1","query2","query3","query4","query5"]))

# 写入到ini文件
with open("testing.ini", "w") as config_file:
    config.write(config_file)

生成的testing.ini内容如下:

[Queries]
Header1 = query1,query2,query3,query4,query5,query6
Header2 = query1,query2,query3,query4,query5

读取并还原列表的代码

import configparser

config = configparser.ConfigParser()
config.read("testing.ini")

# 读取字符串后用split转回列表
header1_queries = config.get("Queries", "Header1").split(",")
header2_queries = config.get("Queries", "Header2").split(",")

print(header1_queries)  # 输出: ['query1', 'query2', 'query3', 'query4', 'query5', 'query6']

方案2:用JSON字符串存储列表(更严谨)

如果你的列表元素可能包含逗号或者更复杂的结构,推荐用json.dumps把列表转成标准JSON字符串存储,这样读取时不会出错:

写入配置文件的代码

import configparser
import json

config = configparser.ConfigParser()
config.add_section("Queries")

# 用json.dumps将列表转为JSON格式的字符串
config.set("Queries", "Header1", json.dumps(["query1","query2","query3","query4","query5","query6"]))
config.set("Queries", "Header2", json.dumps(["query1","query2","query3","query4","query5"]))

with open("testing.ini", "w") as config_file:
    config.write(config_file)

生成的testing.ini内容更贴近你之前的JSON结构:

[Queries]
Header1 = ["query1", "query2", "query3", "query4", "query5", "query6"]
Header2 = ["query1", "query2", "query3", "query4", "query5"]

读取并还原列表的代码

import configparser
import json

config = configparser.ConfigParser()
config.read("testing.ini")

# 用json.loads把JSON字符串转回列表
header1_queries = json.loads(config.get("Queries", "Header1"))
header2_queries = json.loads(config.get("Queries", "Header2"))

为什么会触发TypeError?

再补充下原理:INI文件是一种纯文本的键值对配置格式,所有值本质上都是字符串。configparser在设计时就只接受字符串类型的配置值,所以直接传入Python的列表(或者其他非字符串对象)就会触发类型检查错误。通过序列化把列表转成字符串,就符合它的要求啦。

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

火山引擎 最新活动