在文件python中找到字符串的位置

时间:2015-08-25 23:27:58

标签: python

我有一个大的txt文件,我想在其中找到一组特定的字符串并提取其后面的数字。例如:

26.08.15 14:52:04 Pressure 1.02 Temperature 32.5 NOb 10993 VB 28772  
.... <other stuff>
26.08.15 14:53:06 Pressure 1.03 Temperature 31.6 NOb 10993 VB 28008 
.... <other stuff>

我希望能够找到String = Temperature并提取后面的数值。我见过一些例子告诉我字符串是否存在,但没有任何东西可以告诉我它在哪里或如何索引它后面的信息。这是可以在Python中完成的吗?

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式组匹配

import re
with open("example.txt") as f:
    for line in f:
        m = re.match(".* Temperature (.*?) .*", line)
        if m:
            try:
                number = float(m.group(1))
                print(number)
            except ValueError:
                pass # could print an error here because a number wasn't found in the expected place

答案 1 :(得分:2)

我讨厌正则表达式,所以这里是纯python解决方案。

lines = "26.08.15 14:52:04 Pressure 1.02 Temperature 32.5 NOb 10993 VB 28772 .... 26.08.15 14:53:06 Pressure 1.03 Temperature 31.6 NOb 10993 VB 28008 ...."
lines = lines.split()
for n, word in enumerate(lines):  
    if word in ['Temperature', 'Pressure']:
        print(word, lines[n+1]) 

答案 2 :(得分:0)

这可以通过逐字手动读取文件或使用python的正则表达式来实现。在我看来,使用正则表达式可以在不损失可读性的情况下实现更简洁的代码,因此我将专注于该解决方案。

re模块(https://docs.python.org/3/library/re.html)的python文档:

  

(?<=...)匹配,如果字符串中的当前位置前面是以当前位置结束的...匹配。

     

此示例查找连字符后面的单词:

m = re.search('(?<=-)\w+', 'spam-egg')
m.group(0)

在您的示例中,您希望在每次出现&#34;温度&#34;之后进行搜索。对于任意数量的数字\d+,可选的是小数点\.?和更多数字\d+?re.findall()功能可能很有用。