5

我正在编写一个列表处理脚本,该脚本需要读取列表中每个项目的配置数据。配置数据最好表示为嵌套树。

我通常会使用 YAML 来存储数据——但我认为使用 ConfigParser 将是一种更 Pythonic 的方法——并使脚本对其他 Python 编码器更加“透明”——因为有惊人数量的人不熟悉 YAML 格式.

我快速浏览了configParser 文档,但我无法确定它是否可以处理嵌套数据。

我的配置数据将具有以下结构:

<markers>
    <marker>
        <date></date>
        <value></value>
    </marker>
</markers>
<items>
    <item>
        <start></start>
        <end></end>
        <mcc>
           <chg>
                <date></date>
                <ival></ival>
                <fval></fval>
           </chg>
        </mcc>
    </item>
</items>

我可以使用 ConfigParser 在配置文件中读取/(写入?)这种嵌套数据吗?(我对能够读取而不是编写配置文件更感兴趣。如果需要,我不介意手动编写配置文件)。

4

3 回答 3

9

不,configparser不支持嵌套。您可以改为查看configObj。它已经成熟并且被广泛使用。

于 2012-02-15T11:21:48.803 回答
5

根据您的 xml 数据,您需要部分和小节。所以你可以使用,ConfigParser但你必须给子部分一些意义,比如

[markers]
[markers.marker]
date=''
value=''

[items]
[items.item]
start=''
end=''
[items.item.mcc]
[items.item.mcc.chg]
date=''
ival=''
fval=''

然后您必须重写该getsection函数以获取嵌套数据。

于 2012-02-15T11:39:17.443 回答
0

TOML配置文件遵循与文件类似的语法INI并允许嵌套结构。请参阅此处的官方规范和此处的相应 python 库。

例子:

>>> import toml
>>> toml_string = """
... # This is a TOML document.
...
... title = "TOML Example"
...
... [owner]
... name = "Tom Preston-Werner"
... dob = 1979-05-27T07:32:00-08:00 # First class dates
...
... [database]
... server = "192.168.1.1"
... ports = [ 8001, 8001, 8002 ]
... connection_max = 5000
... enabled = true
...
... [servers]
...
...   # Indentation (tabs and/or spaces) is allowed but not required
...   [servers.alpha]
...   ip = "10.0.0.1"
...   dc = "eqdc10"
...
...   [servers.beta]
...   ip = "10.0.0.2"
...   dc = "eqdc10"
...
... [clients]
... data = [ ["gamma", "delta"], [1, 2] ]
...
... # Line breaks are OK when inside arrays
... hosts = [
...   "alpha",
...   "omega"
... ]
... """
>>> parsed_toml = toml.loads(toml_string)
于 2022-01-09T13:13:48.720 回答