【问题标题】:Extracting information from a TXT file with python使用python从TXT文件中提取信息
【发布时间】:2019-11-21 18:33:06
【问题描述】:

我有一个如下所示的 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 ...

知道怎么做吗?

谢谢!

【问题讨论】:

  • 根据您自己的研究,了解您到目前为止所尝试的内容、结果是什么以及该结果与您的需要有何不同会有所帮助
  • 我无法找到任何解决方案,这就是我没有添加该信息的原因。谢谢。

标签: python string text-extraction


【解决方案1】:

一个粗略的解决方案可能是这样的(使用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

【讨论】:

  • 谢谢!它也适用于我。如果可能的话,你能评论一下每个部分的作用吗?这样我就可以自己学习如何在未来应用这种类型的解决方案;)
猜你喜欢
  • 2022-06-30
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
相关资源
最近更新 更多