Skip to main content
 首页 » 编程设计

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

2025年05月04日21haluo1

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

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  

我只需要提取子串

'1a'

来自

'SNS__GENERATED_EVENTS (Event1a, DIR = 1)'

等等。 所以,基本上,'(Event' 之后的两个字符

我需要将它们存储在列表中或其他我可以使用它们的地方。

我该怎么做?

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

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 

我得到的输出是:

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

请您参考如下方法:

如果行位置总是固定的,韦恩的答案是最有效率的。如果位置可以稍有不同,这是使用正则表达式的合适情况:

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)) 

这会在每一行中搜索 SNS__GENERATED_EVENTS,然后可能是一些字符,然后是 Event,然后是另外两个字符,然后获取这两个字符。