在Python中,我使用RRDTool Python包装器在RRD数据库中存储和读取值。
RRDTool for Python是rrdtool的基于C的源/命令行实用程序的包装器。
创建数据库后,我想使用python命令读出它的标题:
header_info = rrdtool.info('database_file_name.rrd')
等于命令行实用程序:
rrdtool info database_file_name.rd
将打印标题信息:
filename = "database_file_name.rrd"
rrd_version = 5
...
ds[datasource_identifier_1].index = 0
ds[datasource_identifier_1].type = "GAUGE"
...
ds[datasource_identifier_2].index = 1
ds[datasource_identifier_2].type = "GAUGE"
...
在python中,命令行工具的输出包含在一个包含以下模式的大字典中:
key: value
"filename" : "database_file_name.rrd"
"ds[datasource_identifier_1].index" : "0"
"ds[datasource_identifier_2].type" : "GAUGE"
我现在正试图找出如何拆分该字典,以便我可以像这样访问它:
index = dictionary["ds"]["datasource_identifier_1"]["index"]
但我不知道如何使用python做到这一点。我猜这可以通过迭代原始字典来完成,并使用“[”,“]”和“。”拆分这些键。作为触发器然后创建一个新的字典。
我怎么能用Python做到这一点?
答案 0 :(得分:1)
我们需要解析密钥以查看它们是否像ds[some_identifier].type
等。
def process_dict(dictionary):
import re
rgx = re.compile(r"^(ds)\[(.+?)\]\.(index|type)$")
processed = {}
for k, v in dictionary.items():
# does k have the format ds[some_key].index etc
m = rgx.search(k)
if m:
# create the embedded path
ds, ident, attr = m.groups()
processed.setdefault(ds, {}).setdefault(ident, {})[attr] = v
else:
processed[k] = v
return processed