找不到任何内容时如何处理正则表达式 (Python)

How to handle regex when it doesn't find anything (Python)

我正在多个文档中搜索值,以便为每个参数创建不同的数据库。 "groups["BRICK"]" 包含所有文本格式的文档。

a_dict = ['RHO','CE','LAMBDA','THETA_POR','THETA_EFF','THETA_CAP','THETA_80','AW','MEW','KLEFF']

Brick_par = []

for bricks in groups["BRICK"]:
    for par in a_dict:
        file = open(bricks, 'r', encoding='latin-1')
        file_txt = file.read() #leggo il file
        regex = '(('+(par)+')+)\s+=\s+([0-9]+.?[0-9]+)'
        searched = re.search(regex, file_txt) #cerco la riga da modificare
        Brick_par.append(searched[3])
Brick_par = pd.DataFrame({str(par):Brick_par})

如果我不使用循环而不是单独使用几个参数(例如 CE),脚本就可以工作。这是因为有些文档不包含某些参数。

我想知道是否有一种方法可以“忽略”正则表达式在文档中找不到任何内容的所有值。那样我大概就能解决了。

此外,我的目标是创建一个包含找到的所有参数的数据框。但那是后面的步骤。

我得到的错误是:

TypeError: 'NoneType' object is not subscriptable

根据 diggusbickus 的建议:

a_dict = ['RHO','CE','LAMBDA','THETA_POR','THETA_EFF','THETA_CAP','THETA_80','AW','MEW','KLEFF']

Brick_par = []

for bricks in groups["BRICK"]:
    for par in a_dict:
        file = open(bricks, 'r', encoding='latin-1')
        file_txt = file.read() #leggo il file
        regex = '(('+(par)+')+)\s+=\s+([0-9]+.?[0-9]+)'
        searched = re.search(regex, file_txt)
        if not searched: continue
        Brick_par.append(searched[3])
        file.close()

Brick_par = pd.DataFrame({str(par):Brick_par})

我的目标是创建一个数据框,其中包含每个参数的所有结果。感谢您的光临。

你应该首先让 brick_par 成为一个字典,因为这就是你想要给 pandas

的东西
import pandas as pd
import re
a_dict = ['RHO','CE','LAMBDA','THETA_POR','THETA_EFF','THETA_CAP',
        'THETA_80','AW','MEW','KLEFF']

brick_par = {k: [] for k in a_dict}
for bricks in groups["BRICK"]:
    for par in a_dict:
        with open(bricks, 'r', encoding='latin-1') as f:
            file_txt = f.read() #leggo il file
        regex = '(('+(par)+')+)\s+=\s+([0-9]+.?[0-9]+)'
        searched = re.search(regex, file_txt)
        if not searched: 
            brick_par[par].append(None)
        else:
            brick_par[par].append(searched[3])

brick_par = pd.DataFrame(brick_par)