给定一个数据文件,我需要在给定的a列表下查询一个特定的值,并提取与之关联的值
假设我的数据文件看起来像
Surface name: wing
Total CL ( 86%): 0.994313 | Pressure ( 100%): 0.994348 | Friction ( 0%): -0.000035 | Momentum ( 0%): 0.000000
Surface name: body
Total CL ( 1%): 0.018554 | Pressure ( 99%): 0.018535 | Friction ( 0%): 0.000019 | Momentum ( 0%): 0.000000
我需要在每个曲面名称下查询Total CL
的值并提取该值。我需要最终输出为
Surface name Total CL
wing 0.9943
body 0.0185
我的新手尝试是使用regex表达式查询Total CL
的值,如下所示
import os
import re
import shutil
SurfaceList=[wing,body]
CL=[]
# I need to query for Total CL for each of the elements of the list
regexp1=re.compile(r'Total CL: .*?([0-9.-]+)')
for surface in SurfaceList:
with open(file) as f:
for line in f:
match1 = regexp1.match(line)
if (match1):
CL.append(match2.group(1))
然而,这只查询出现的第一个示例,并停止进一步的查询,我无法转到列表的其他元素。
3条答案
按热度按时间klsxnrf11#
你的代码中有很多错误:
wing
和body
?您是否在其他地方定义了此类变量?match2
?你是说match1
吗re.match
不是您要搜索的函数,因为它查找的是 exact 匹配。re.search
是正确的。Total CL
后面使用冒号?此外,您正在搜索它后面的第一个数字,但第一个数字是百分比!您应该使用类似^Total CL.*?([0-9]+\.[0-9]+\b(?!%))
的代码,其中\b
是单词边界,(?!%)
表示后面没有%
。我相信这就是你需要的:
或者,如果你可以通过一个
read
调用打开你的文件,你可以使用re.findall
:0yycz8jy2#
可以从文件中导出曲面名称。
要提取的值是以下字符之间的第一个字符序列:(冒号)和|(管道)以“Total CL”开头的行
因此:
输出:
s4n0splo3#
你知道名字和值的位置。所以你可以不使用
regex
。下面是一个例子: