我有一个由空格分隔的键值字符串组成的大型多行文本,并使用===字符将其划分为块。 对于每个块,我想创建一个具有键值的字典
基本上,我发现自己更难编写正则表达式而不是创建字典,我使用这个r'^(\w+)\s*(.*)'
来获取关键字和值,因为空格后面有什么,但我不知道如何通过===将文本分成块。
值显然是假的,但是,每个值都可能溢出到新行,如下面所示。你知道吗
见下文:
name jcento
server_param uptime=2,load=2, \
mem=1,io=10
info_values cpu=5,io=1,load=0, \
core=8, mem=22724, \
info_value1 10
info_value2 banana
info_value3 NONE
projects proj1 proj2 proj3 \
proj4
info_value5 NONE
info_value6 NONE
info_value7 NONE
info_value8 NONE
info_value9 NONE
================================================================================
name jcento
server_param uptime=2,load=2, \
mem=1,io=10
info_values cpu=5,io=10,load=0, \
core=8, mem=22724, \
info_value1 10
info_value2 banana
info_value3 NONE
projects proj1 proj2 proj3 \
proj4
info_value5 NONE
info_value6 NONE
info_value7 NONE
info_value8 NONE
info_value9 NONE
我希望输出是一个字典列表[{name:'jcento', server_param: 'uptime=2,load=2,mem=1,io=1', ...}, {name:'jcento5',....}]
另外,如果可能的话,要创建一个regex,该regex从key=value of name,value=value of projects生成字典,例如:
{jcento: 'proj1 proj2 proj3 proj4', jcento5: 'proj1 proj2 proj3 proj4'}
。你知道吗
提前谢谢!你知道吗
如果我理解正确,您希望每个由“=============”边界分隔的部分在dict列表中是其唯一的dict。 您没有提供任何代码,但是看到您使用这个正则表达式来查找键/值对
我假设您抓取这两个组并将它们各自的值作为
newDict[match.group(1)] = match.group(2)
传递问题归结到如何读取数据。在这种方法中,我只需逐行读取文件,但由于您的值可以是多行的,因此我已经不确定您如何从您提供的regex中获得正确的分组。”(.*)“应该贪得无厌,回报你比你想要的多得多。你知道吗
如果所有的换行符都用“\”标记,您可以编写一个正则表达式来考虑这一点,如下所示: 将“(.*)”替换为“([\w,=]+(\s\\s)?[\w,=]+)?)”你知道吗
然而,我可能只是在读入文本文件时对其进行某些调整,以便在遍历它并使用以前的regex捕获之前,将所有数据点存储在一行中。 额外奖励: 您可以在迭代函数中添加与“==========”匹配的行,并在将旧字典添加到列表时初始化新字典。你知道吗
如果你感到骄傲,你也可以用“else”代替“elif”。 或者更好的是,将整个过程包装在Try块中,以检查是否有任何数据点与您的regex模式不匹配
相关问题 更多 >
编程相关推荐