【发布时间】:2018-03-09 20:19:23
【问题描述】:
我有 100 个 .txt/.sed 文件,每个文件中有很多行。
示例输入文件:
Time: 10:34:51.49,15:21:39.24
Box Temperature (K): 32.82,8.88,-10.07
Silicon Temperature (K): 10.90,9.88
Voltage: 7.52,7.41
Dark Mode: AUTO,AUTO
Radiometric Calibration: RADIANCE
Units: W/m^2/sr/nm
GPS Time: n/a
Satellites: n/a
Channels: 1024
期望的输出:
Time 15:21:39.24
Box Temp 32.82
8.88
-10.07
Si Temp 10.90
9.88
我试图编写代码来识别字符串,然后列出值,然后将它们排列到 DataFrame 中,然后将它们写入 .csv 文件。 示例代码
testtxt = 'Temperature (K): 32.82,8.88,-10.07,32.66,8.94,-10.07'
exp = r'^Temperature (K):(\s*) ([0-9.]+)([0-9.]+), ([0-9.-]+) , (-[0-9-.]+),([0-9-.]+) , ([0-9-.]+),(-[0-9-.]+)'
regexp = re.compile(exp)
my_temp = regexp.search(txt)
print(my_temp.group(0))
错误:
AttributeError: 'NoneType' object has no attribute 'group'
基本上,它找不到匹配项!
澄清:我想要一种有效的方法来仅提取时间和温度值,而不是其他值。一旦找到文件就能够停止扫描文件会很棒,因为每个文件都有超过 500 行,而且我有很多。
【问题讨论】:
-
时间的规则是什么?
-
尝试使用 .split() 方法来获得您想要的结果。用“,”分割每个字符串,因为您想要的每个结果都用逗号分隔。
-
@RohanB 我对正则表达式真的很陌生,你能举个例子来说明你在说什么吗?现在不是把表达式中的逗号当作字面意思了吗?
-
@Jan 我尝试在 MATLAB 中这样做,所以语法可能有点不同,而且它的效率非常低 atm: 'expr = '(?(.*))'; '
-
@Brain_overflowed 对不起,我不能举一个很好的例子,因为我也不太擅长正则表达式。
标签: python regex python-3.x search match