python - 将字典转换为配置文件,然后从配置中恢复字典

标签 python text configuration dictionary

例如,我有一个这样的 Python 字典:

{"a_summary" : 
   {"data1":{"length":100, "quality":10}, 
    "data2":{"length":90, "quality":9}},
"b_summary" :  
   {"data1":{"comments":19, "views":100}, 
    "data2":{"comments":9, "views":4}}}

然后我想将它转换成这样的 conf 文件:

[a_summary]
data1_length=100
data1_quality=10
data2_length=90
data2_quality=9

[b_summary]
data1_comments=19
data1_views=100
data2_comments=9
data2_views=4

虽然用data1_data2_ 来表示嵌套看起来有点奇怪,但现在看来没问题了。

但是我需要将这个 conf 文件发送给另一个用户,他需要从这个 conf 文件恢复原始字典。看来用户必须多写一些代码来恢复字典。然而,这个解决方案看起来很脏。

我想知道是否有一种 Pythonic 的方式让我将 dict 保存到 conf 文件中(如果 conf 文件不合适,其他可读格式的纯文本也可以接受),然后从该纯文本文件恢复 dict。

最佳答案

configparser模块。它可以帮助您做您想做的事。

import configparser

data = {"a_summary" : {"data1":{"length":100, "quality":10}, 
            "data2":{"length":90, "quality":9}},
        "b_summary" :  {"data1":{"comments":19, "views":100}, 
            "data2":{"comments":9, "views":4}}}
config = configparser.ConfigParser()
for key1, data1 in data.items():
    config[key1] = {}
    for key2, data2 in data1.items():
        for key3, data3 in data2.items():
            config[key1]["{}_{}".format(key2, key3)] = str(data3)
with open('example.ini', 'w') as configfile:
    config.write(configfile)

再读一遍:

config2 = configparser.ConfigParser()
config2.read('example.ini')
data = {}
for key in config2.sections():
    data[key] = {}
    for key2 in config2[key]:
        k1, k2 = key2.split('_')
        if k1 not in data[key]:
            data[key][k1] = {}
        data[key][k1][k2] = int(config2[key][key2])

关于python - 将字典转换为配置文件,然后从配置中恢复字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15970647/

相关文章:

python - Python 中的网页抓取更高效?

java - 如何在我自己的java类中使用BerkeleyAligner?

CSS水平菜单问题-多行文本上的按钮

c# - 如何在 ConfigurationElement 中包含 CDATA 部分?

python - 如何从pandas数据框中返回几个最大值的索引?

python - Facebook 连接注销的最佳做法?

c - 分割从文本文件中读取的长句子

java - 如何在 Spring xml 配置文件中初始化 Java Date 对象?

configuration - 在 Swing 应用程序中使用自定义字体

python - 从帧字节获取帧值