我有一个看起来像这样的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/