python - 需要帮助解析配置数据

标签 python

我有以下代码:

all_messages = {}
num = None
index = None
begin_message = lambda x: re.match(r'^([0-9]+)\: (.+)', x)
with open(filename) as f:
    messages = {}
    message = []
    for line in f:
        m = re.match(r'^\[(.+)\]$', line)
        if m:
            if index:
                messages.update({num: '\n'.join(message)})
                num = None
                all_messages.update({index: messages}) 
            index = m.group(1)
            print index
        elif begin_message(line):
            if num:
                messages.update({num: '\n'.join(message)})
            del message[:]
            num = int(begin_message(line).group(1))
            begin = begin_message(line).group(2).strip()
            if begin:
                message.append(begin)
        else:
            cont = line.strip()
            if cont:
                if num:
                    message.append(cont)
    else:
        end = line.strip()
        if end:
            if num:
                messages.update({num: '\n'.join(message)})
        all_messages.update({index: messages})
print all_messages

我正在尝试解析与此类似的配置文件:

[Message 1]
1: Hello
2: Hi
3: Blah
   Hah

[Message 2]
1: Hi
2: How's it going?
3: Great.
4: Yep

我获取内容的索引,然后获取每条消息,一切正常,除了当我尝试更新字典时,它似乎用后面的消息替换了开始的消息。

例如,我期待这样的字典:

{ "Message 1":
  { 1: "Hello", 
    2: "Hi",
    3: "Blah\nHah" 
  },
  "Message 2":
  { 1: "Hi",
    2: "How's it going",
    3: "Great.",
    4: "Yep"
  }
}

但我最终得到:

{ "Message 1":
  { 1: "Hi",
    2: "How's it going",
    3: "Great.",
    4: "Yep"
  },
  "Message 2":
  { 1: "Hi",
    2: "How's it going",
    3: "Great.",
    4: "Yep"
  }
}

感谢您的帮助

最佳答案

您正在重新实现 Python 的 ConfigParser模块,我建议你停止。

>>> import ConfigParser
>>> config = ConfigParser.ConfigParser()
>>> config.read('8805198.cfg')
['8805198.cfg']
>>> d = dict((section, dict(config.items(section))) for section in config.sections())
>>> print d
{'Message 1': {'1': 'Hello', '3': 'Blah\nHah', '2': 'Hi'}, 'Message 2': {'1': 'Hi', '3': 'Great.', '2': "How's it going?", '4': 'Yep'}}
>>> print d['Message 1']
{'1': 'Hello', '3': 'Blah\nHah', '2': 'Hi'}
>>> print d['Message 1']['3']
Blah
Hah

关于python - 需要帮助解析配置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805198/

相关文章:

python - 每次循环重复时如何将一个数字添加到另一个数字

python - Sphinx 文档常量替换

python - PIL 获取图像调色板

python - 属性错误: 'QScatterSeries' object has no attribute 'points'

python - 打印/输出时如何从列表中删除方括号

Python 3.6 Split() 没有足够的值来解压解决方法?

python - 返回 header 内容 - API 网关 + AWS Lambda

python - 限制函数/方法的可选位置参数的数量

python - 如何从图像阵列中制作彩色点阵列?

python - 如何训练机器标记文本中的单个单词