找不到任何内容时如何处理正则表达式 (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)
我正在多个文档中搜索值,以便为每个参数创建不同的数据库。 "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)