У меня есть файл в следующем формате:

device={
   id=1
   tag=10
   name=device1
}
device={
   id=2
   tag=20
   name=device2
}
device={
   id=3
   tag=30
   name=device3
}

Допустим, меня интересует только устройство с id=2, и я хочу извлечь его номер тега (это настраивается и будет изменен из другого кода). Поэтому мне нужно извлечь номер тега идентификатора устройства 2. Как я могу сделать это в Python. Я сделал следующее:

ID='id=2'

with open("file.txt") as file:
          for line in file:
              if line.strip() ==  ID:
                  #Here I do not know what to write 
                  # to extract 20

Спасибо

2
S Andrew 28 Авг 2017 в 18:28

3 ответа

Лучший ответ

Вы можете прочитать следующую строку, используя line.readline(), попробуйте использовать этот код:

ID='id=2'

with open("file.txt") as file:
    while True:
        line = file.readline()
        if line.strip() == ID:
            nextline = file.readline()
            result = nextline.strip().split('=')[1]
       if line == '':
            break
3
Vladyslav 28 Авг 2017 в 15:52

С re.search функция:

import re

with open('file.txt', 'r') as f:
    id_num = 'id=2'
    tag_num = re.search(r'' + id_num + '\s+tag=([0-9]+)', f.read())
    print(tag_num.group(1))

Выход:

20

  • f.read() - читает содержимое файла (как текст)

  • r'' + id_num + '\s+tag=([0-9]+)' - создание шаблона регулярного выражения, чтобы он стал id=2\s+tag=([0-9]+), где \s - это один или несколько пробельных символов (включая символы новой строки), а ([0-9]+) - первая захваченная группа, содержащая тег номер

  • tag_num.group(1) - извлечение значения первой захваченной / заключенной в скобки группы 1 из match object tag_num

4
RomanPerekhrest 28 Авг 2017 в 15:51
with open("") as file:
    #print file.read()

    for line in file:
        #print line.split()
        if line.strip()==ID:
          d=file.next()              #reads next line
          print d.split('=')[1]
          break
1
akp 28 Авг 2017 в 15:57