<p>这里有一个建议,使用来自<code>collections</code>的<code>defaultdict</code>将您的特定模型名称作为键,并将该模型的<code>tb_to_tb_evalue</code>行数作为值。因为您正在完全读取所有文件,所以查找<em>所有</em>模型的计数没有实际的额外开销。但最终从列表中获取特定型号的计数将是非常简单的</p>
<pre><code>from collections import defaultdict
import re
tb_count = defaultdict(int)
# create regular expression to find the model name from the "begin(model(...))" lines
model_regex = re.compile(r"begin\(model\((.*)\)\)")
for file in all_filenames:
model = None # initiate model as None for each file, but value will be changed if begin(model( line is encountered
with open(file) as f:
for line in f:
if line.startswith("begin(model("):
# identify the model name
match = model_regex.search(line)
if match:
model = match.group(1)
if line.startswith("tb_to_tb_evalue("):
tb_count[model] += 1 # increase the count for the current active model
</code></pre>
<p>因此,它将遍历所有文件<em>,但只遍历一次</em>。最后,要从特定列表(例如<code>myarray</code>)中获取所有模型的计数,您可以编写如下内容:</p>
<pre><code>models_of_interest = {k: v for k, v in tb_count.items() if k in myarray }
</code></pre>