如何从python中的文件中提取多行的子字符串

aab*_*baa 1 python split list enumerate python-2.7

我有一个包含数千行的文件,在文件中有一些行,如:

Line 115463: 08:59:25.106   08:59:24.992877 ASDF_IIS_CFGDB  GenMod  Ta-SNS__GENERATED_EVENTS (Event2f, DIR = 13)    rrc_UlUtranMsg.c (../../../HEDGE/UL3/ASDF/UtranMsg/Uplink/Code/Src) 987 
Line 236362: 08:59:28.647   08:59:28.597827 ASDF_IIS_CFGDB  GenMod  Ta-SNS__GENERATED_EVENTS (Eventab, DIR = 1) rrc_UlUtranMsg.c (../../../HEDGE/UL3/ASDF/UtranMsg/Uplink/Code/Src) 934 
Line 324964: 08:59:40.456   08:59:40.403644 ASDF_IIS_CFGDB  GenMod  Ta-SNS__GENERATED_EVENTS (Eventac, DIR = 1) rrc_UlUtranMsg.c (../../../HEDGE/UL3/ASDF/UtranMsg/Uplink/Code/Src) 934 
Line 341172: 08:59:40.659   08:59:40.616565 ASDF_IIS_CFGDB  GenMod  Ta-SNS__GENERATED_EVENTS (Eventfb, DIR = 13)    rrc_UlUtranMsg.c (../../../HEDGE/UL3/ASDF/UtranMsg/Uplink/Code/Src) 987 
Line 373186: 08:59:41.174   08:59:41.104755 ASDF_IIS_CFGDB  GenMod  Ta-SNS__GENERATED_EVENTS (Event2f, DIR = 1) rrc_UlUtranMsg.c (../../../HEDGE/UL3/ASDF/UtranMsg/Uplink/Code/Src) 934 
Line 480217: 08:59:44.481   08:59:44.389453 ASDF_IIS_CFGDB  GenMod  Ta-SNS__GENERATED_EVENTS (Eventx1, DIR = 1) rrc_UlUtranMsg.c (../../../HEDGE/UL3/ASDF/UtranMsg/Uplink/Code/Src) 934 
Line 505424: 08:59:44.777   08:59:44.701709 ASDF_IIS_CFGDB  GenMod  Ta-SNS__GENERATED_EVENTS (Event1a, DIR = 1) rrc_UlUtranMsg.c (../../../HEDGE/UL3/ASDF/UtranMsg/Uplink/Code/Src) 934 
Run Code Online (Sandbox Code Playgroud)

我只需要提取子字符串

'1A'

'SNS__GENERATED_EVENTS(Event1a,DIR = 1)'

等等.所以,基本上,'(事件'后面的两个字符)

我需要将它们存储在列表中或我可以使用它们的其他位置.

我怎样才能做到这一点?

到目前为止,我已经尝试了以下代码,但它给了我一些混合的值:

events = []

for line in input_txt_file:
        if "Ta-SNS__GENERATED_EVENTS " not in line: continue
        parts = line.split('Event')
        event_temp = [0]
        for i,part in enumerate(parts):
            if part.endswith("Ta-SNS__GENERATED_EVENTS ("): event_temp[0] = parts[i+1].split(None,1)[0].split(',',2)[0]
            events.append(event_temp)

print events
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

[[0],[0],['2f'],['2f'],['ab'],['ab'],[0],[0],['ac'],['ac '],['fb'],.......]

Amb*_*ber 6

如果线路位置始终固定,Wayne的答案是最有效的.如果位置可能有所不同,这是使用正则表达式的一个不错的情况:

import re
events = []

for line in input_txt_file:
    match = re.search(r'SNS__GENERATED_EVENTS.*?Event(..)', line)
    if match:
        events.append(match.group(1))
Run Code Online (Sandbox Code Playgroud)

这会搜索每一行SNS__GENERATED_EVENTS,然后搜索一些字符,然后Event再搜索另外两个字符,并抓取这两个字符.