2014-01-14 2 views
0

У меня есть файл содержит строки нравится:Как извлечь конкретные данные в строке с помощью python?

754.82915: MODE1(0, 0x001900, 0x00090) 
754.82916: MODE2(0, 0x001900, 0x00090) 

Как взять данные из «(» до «)» в питона ??.

Я попробовал код:

fo=open("file1.txt","r") 
fin=open("file2.txt","w") 
lines=fo.readlines() 
for line in lines: 
    result=re.search(r'\(.*\)', line) 
    res="\n"+result.group() 
    fin.write(res) 
fo.close() 

Он показывает следующее сообщение об ошибке:

AttributeError: 'NoneType' object has no attribute 'group' 
+0

Это точное содержание вашего текстового файла? (Возможно, у вас тоже есть пустые строки) –

+1

['re.search (pattern, string, flags = 0)'] (http://docs.python.org/2/library/re.html#re. search): Return None, если никакая позиция в строке не соответствует шаблону; обратите внимание, что это отличается от поиска совпадения нулевой длины в некоторой точке строки. –

ответ

1

Придерживаясь исходного кода, j ust добавить одну строку, чтобы проверить, result is None.

with open("file1.txt","r") as fin: 
    lines = fin.readlines() 
    with open("file2.txt","w") as fout: 
     for line in lines: 
      result = re.search(r'\(.*\)', line) 
      if result:  # check if not None 
       res = "\n" + result.group() 
       fout.write(res) 

Вы также должны узнать о более питонском ответе Питера.

1

Вы должны рассмотреть возможность использования with заявления и findall() функции re модуля, например:

import re 

with open('file1.txt', 'r') as fin: 
    with open('file2.txt', 'w') as fout: 
     fout.write('\n'.join(re.findall(r'\(.*\)', fin.read()))) 
Смежные вопросы