文本文件python中的连续str搜索

时间:2019-01-25 11:37:28

标签: python string search text

我正在尝试编写一个脚本来分析pyomo模型的lp文件。我想首先列出lp文件中出现的所有约束。这是lp文件的一小部分:

\* Source Pyomo model name=urbs *\

min 
obj:
+1 costs(Environmental)
+1 costs(Fixed)
+1 costs(Fuel)
+1 costs(Invest)
+1 costs(Variable)

s.t.

c_e_res_vertex(1_Mid_Biomass_Stock)_:
+1 e_co_stock(1_Mid_Biomass_Stock)
-1 e_pro_in(1_Mid_Biomass_plant_Biomass)
= 0

c_e_res_vertex(1_Mid_Coal_Stock)_:
+1 e_co_stock(1_Mid_Coal_Stock)
-1 e_pro_in(1_Mid_Coal_plant_Coal)
= 0

因此,如果lp文件与上面的文件类似,那么我的脚本应在以下几行中打印或写入文本文件

res_vertex(1_Mid_Biomass_Stock)
res_vertex(1_Mid_Coal_Stock)

我发现每个约束都以'c_e_'开头并以')_'结束,因此我写了以下字符串来获取第一个约束res_vertex(1_Mid_Biomass_Stock)

with open('lp_file.lp', 'r') as lp:
    lp = lp.read().replace('\n', ' ')
    lp = str(lp[lp.find('c_e_')+4:
                lp.find(')_')+1])
    print(lp)

以上代码段实际上会打印出第一个约束,但是我可能需要使用for循环对连续的约束(第2,第3,第4等)进行打印。

我不能强迫.find()在某些索引之后进行搜索。那我该怎么解决呢?

PS:约束名称的长度不同

1 个答案:

答案 0 :(得分:0)

您可以将'c_e_'与用于提取')_'output_file之间的内容的模式一起使用(假设import re with open('lp_file.lp', 'r') as lp: for line in lp: match = re.match(r'c_e_(.*\))_', line) if match: print(match.group(1), file=output_file) 是将输出写入的文件对象):

encoder = preprocessing.LabelEncoder()
encoded_y_train = encoder.fit_transform(y_train)
dummy_y_train = np_utils.to_categorical(encoded_y_train)