Получение строки над поисковым значением в python - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть текстовый файл, который я хочу найти по определенному IP-адресу, и способ настройки текстового файла состоит в том, что имя хоста выше ip add. т.е.

real HOSTNAME

address xx.xx.xx.xx

Каков наилучший / самый простой способ получения имени хоста, когда у меня есть только IP-адрес для поиска? Регулярные выражения? Есть ли в python утилита, подобная sed, которая имеет место для хранения? Спасибо за любую помощь, спасибо

Ответы [ 3 ]

3 голосов
/ 14 ноября 2011

Регулярное выражение - это, вероятно, самое простое решение.

>>> textdata = '''
someline
another line
real HOSTNAME

address 127.0.0.1
post 1
post 2
'''
>>> re.findall('^(.*)$\n^.*$\naddress 127.0.0.1', textdata, re.MULTILINE)
['real HOSTNAME']

Вы также можете использовать модуль linecache или просто прочитать все строки в список, используя f.readlines().

2 голосов
/ 14 ноября 2011

Если вы знаете, сколько строк имя хоста перед ip, вы можете перечислить список строк и вычесть необходимое количество строк из текущего индекса:

lines = open("someFile", "r").read().splitlines()
IP = "10.10.1.10"
hostname = None
for i, line in enumerate(lines):
    if IP in line:
        hostname = lines[i - 1]
        break

if hostname:
    # Do stuff
2 голосов
/ 14 ноября 2011

Возможно, это не лучшее решение, но вы можете использовать deque, чтобы перехватить n строк над вашей целевой строкой:

from collections import deque
from itertools import takewhile

test = """
real others

address xxx.xxx.xxx

real local

address 127.0.0.1

real others

address xxx.xxx.xxx
""".split("\n")

pattern = "address 127.0.0.1"
print deque(takewhile(lambda x:x.strip()!=pattern, test), 2)[0]

изменить тестовую переменную на file ("yourfilename") для чтения строк из вашего текстафайл.

...