我有一个看起来像这样的TXT文件:

group1

trigger: set_7  string

target: set_7  string

target: set_9  string

trigger: set_8  string

target: set_8  string

source: set_9  string

trigger: set_9  string

group2

source: set_10  string

trigger: set_10  string

target: set_10 string


我必须提取与每个集合相对应的触发器,目标和源。每组至少包含一个触发器,但并不总是包含源或目标。我想将与每个集合相对应的值打印为带有列的行,而将空值保留为NONE,例如:

set_7  trigger:string target:string  source:NONE
...

set_10 ...


关于如何做到这一点的任何想法?

谢谢!

最佳答案

一种粗略的解决方案可能是这样(使用re模块和itertools.groupby):

txt = '''


group1

trigger: set_7 string

target: set_7 string

target: set_9 string

trigger: set_8 string

target: set_8 string

source: set_9 string

trigger: set_9 string

group2

source: set_10 string

trigger: set_10 string

target: set_10 string

'''

import re
from itertools import groupby

s = sorted( re.findall(r'(.*?):.*?set_(\d+)\s+(.*)', txt), key=lambda k: int(k[1]) )

for v, g in groupby(s, lambda k: int(k[1])):
    d = {x: y for x, _, y in g}
    print('set_{} trigger: {} target: {} source: {}'.format(v, d.get('trigger', 'NONE'),
                                                               d.get('target', 'NONE'),
                                                               d.get('source', 'NONE')))


打印:

set_7 trigger: string target: string source: NONE
set_8 trigger: string target: string source: NONE
set_9 trigger: string target: string source: string
set_10 trigger: string target: string source: string

关于python - 使用python从TXT文件中提取信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58981579/

10-12 02:34