1

我是 python 世界的新手,我正在尝试从多个文本文件中提取值。我可以通过循环很好地打开文件,但我正在寻找一种直接的方法来搜索字符串,然后返回它之后的值。

我的结果文本文件如下所示

SUMMARY OF RESULTS
Max tip rotation =,-18.1921,degrees
Min tip rotation =,-0.3258,degrees
Mean tip rotation =,-7.4164,degrees
Max tip displacement =,6.9956,mm
Min tip displacement =,0.7467,mm
Mean tip displacement = ,2.4321,mm
Max Tsai-Wu FC =,0.6850
Max Tsai-Hill FC =,0.6877

所以我希望能够搜索“Max Tsai-Wu =”,它返回 0.6850 我希望能够搜索字符串,因为每个变量的位置可能会在以后发生变化。

很抱歉发布这么简单的问题,只是似乎无法找到一种直接可靠的方法来找到它。

任何帮助将不胜感激!马特

4

4 回答 4

1

您可以使用正则表达式:

import re


regexp = re.compile(r'Max Tsai-Wu.*?([0-9.-]+)')
with open('input.txt') as f:
    for line in f:
        match = regexp.match(line)
        if match:
            print match.group(1)

印刷:

0.6850

UPD:将结果放入列表

import re


regexp = re.compile(r'Max Tsai-Wu.*?([0-9.-]+)') 
result = []
with open('input.txt') as f:
    for line in f:
        match = regexp.match(line)
        if match:
            result.append(match.group(1))
于 2013-09-10T09:12:57.733 回答
1

我最喜欢的方法是测试该行是否以所需的文本开头:

keyword = 'Max Tsai-Wu' 
if line.startswith(keyword):

然后使用逗号分割行并返回值

try:
    return float(line.split(',')[1])
except ValueError:
    # treat the error
于 2013-09-10T09:16:49.533 回答
0

您可以使用正则表达式来查找名称和值:

import re

RE_VALUE = re.compile('(.*?)\s*=,(.*?),')

def test():
    line = 'Max tip rotation =,-18.1921,degrees'
    rx = RE_VALUE.search(line)
    if rx:
        print('[%s] value: [%s]' % (rx.group(1), rx.group(2)))


test()

通过这种方式逐行读取文件,您可以填写一些字典。

我的正则表达式使用值在逗号之间的事实。

于 2013-09-10T09:20:02.590 回答
0

如果文件不是那么大,您可以简单地执行以下操作:

import re
files = [list, of, files]
for f in files:
    with open(f) as myfile:
        print re.search(r'Max Tsai-Wu.*?=,(.+)', myfile.read()).group(1)
于 2013-09-10T09:55:29.803 回答