我是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 我希望能够搜索字符串,因为每个变量的位置可能会在以后更改。
很抱歉发布这么简单的问题,似乎无法找到一种直接找到它的强大方法。
任何帮助将不胜感激! 马特
答案 0 :(得分: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))
答案 1 :(得分:1)
我最喜欢的方法是测试行是否以所需文本开头:
keyword = 'Max Tsai-Wu' if line.startswith(keyword):
然后使用逗号分割行并返回值
try: return float(line.split(',')[1]) except ValueError: # treat the error
答案 2 :(得分: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()
这种方式逐行读取文件可以填写一些字典。
我的正则表达式使用的值是逗号之间的值。
答案 3 :(得分: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)