2013-09-10 5 views
1

Я новичок в мире python, и я пытаюсь извлечь значения из нескольких текстовых файлов. Я могу открыть файлы в порядке с циклом, но я ищу прямой способ поиска строки и затем вернуть значение после нее.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 Я хочу, чтобы иметь возможность искать для как позиция каждой переменной может измениться позднее.

Извините, что разместил такой простой вопрос, просто не может найти прямой способ найти его.

Любая помощь была бы принята с благодарностью! Matt

+0

ли эти файлы большим? – TerryA

+0

довольно маленький, может быть, около 200 строк не более – user2739143

ответ

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)) 
+0

Большое вам спасибо! Могу я просто спросить, что делает r перед Макс Цай-у? Также. *? ([0-9 .-] +)? – user2739143

+0

@ user2739143, конечно, 'r' означает, что это всего лишь [необработанная строка] (http://stackoverflow.com/questions/4415259/python-raw-strings). '. *? ([0-9 .-] +)': '. *?' Здесь означает не-жадное соответствие для любого набора символов - в этом случае он будет соответствовать чему-либо между 'Max Tsai-Wu' и вашим float number, '([0-9 .-] +)' - группа захвата для числа с плавающей точкой, которое вы хотите извлечь. – alecxe

+0

Спасибо, очень помог! – user2739143

0

Мой любимый способ это проверить, если строка начинается с нужного текста:

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

И затем разделить строку с помощью запятых и возвращает значение

try: 
    return float(line.split(',')[1]) 
except ValueError: 
    # treat the error 
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() 

Таким образом, чтение файла по строкам можно заполнить некоторым словарем.

Мое регулярное выражение использует факт, что значение находится между запятыми.

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) 
Смежные вопросы