我有这棵树:
Active Mode
|___ Local (EU)
| |___ <Random String>
|___ International (WW)
| |___ <Random String> (I want this random string!!!)
Passive Mode
|___ Local (EU)
| |___ <Random String>
|___ International (WW)
|___ <Random String>
但是由于某些情况,我的python会将其视为扁平字符串:
Active Mode
Local (EU)
<Random String>
International (WW)
<Random String> (I want this random string!!!)
Passive Mode
Local (EU)
<Random String>
International (WW)
<Random String>
注意: 基本上是一个随机字符串,我不知道它是什么。
现在很容易得到我想要的行,我只要string.split(\n)[4]
。棘手的部分是:
Active Mode
和Passive Mode
),以便Active Mode
在之后{em> Passive Mode
Local (EU)
和International (WW)
)也可以改组Active Mode
,这意味着我应该得到类似None
的东西我想到的一种可能的解决方案是将扁平字符串转换为多层字典,列表或json,但是我不知道该怎么做。
答案 0 :(得分:1)
我草绘了一些代码,但是由于通常不能保证模式内的随机字符串不会与标题和/或模式名称发生冲突,因此这可能很危险:
def parse(text):
lines = text.split('\n')
out = {}
mode, options = None, None
for l in filter(None, lines):
if l.endswith(' Mode'): # must be really careful here
out[l] = out.get(l, {})
mode = out[l]
options = None
continue
# and here...
if l.startswith('Local (') or l.startswith('International ('):
mode[l] = mode.get(l, [])
options = mode[l]
continue
options.append(l)
return out
t = '''
Active Mode
Local (EU)
<Random String>
International (WW)
<Random String> (I want this random string!!!)
Passive Mode
Local (EU)
<Random String>
International (WW)
<Random String>
'''
print(parse(t))
parse()
函数的想法是跟踪局部变量mode
和options
中的当前模式。同时,它在out
中维护了完整的结果对象。