Как найти подстроку в строке из текстового файла и добавить эту строку или символы после искомой строки в список, используя Python? - PullRequest
0 голосов
/ 15 октября 2019

У меня есть набор данных MIB, который составляет около 10 тыс. Строк. Я хочу найти определенную строку (например, "SNMPv2-MIB::sysORID") в текстовом файле и добавить всю строку в список. Я использую Jupyter Notebooks для запуска кода.

Я использовал приведенный ниже код для поиска строки поиска, и она печатает искомую строку вместе со следующими двумя строками.

basic = open('mibdata.txt')
file = basic.read()
city_name = re.search(r"SNMPv2-MIB::sysORID(?:[^a-zA-Z'-]+[a-zA-Z'-]+) {1,2}", file)
city_name = city_name.group()
print(city_name)

Пример строк в файле:

SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.

Ожидаемый результат:

SNMPv2-MIB :: sysORID.10 = OID: NOTIFICATION-LOG-MIB :: messagesLogMIB

но я получаю только

SNMPv2-MIB :: sysORID.10 = OID: NOTIFICATION-LOG-MIB

Проблема с изменением количества строк после искомых строк состоит в том, что количество строк в каждой строке отличается, и я не могу указать константу. Вместо этого я хочу использовать '\ n' в качестве разделителя, но я не смог найти ни одного такого сообщения.

PS Любое другое решение также приветствуется

1 Ответ

0 голосов
/ 15 октября 2019

РЕДАКТИРОВАТЬ

Вы можете читать все строки по одной в файле и искать определенное регулярное выражение, соответствующее регистру.

r(NMPv2-MIB::sysORID).* находит совпадение строки в круглых скобках, а затем сопоставляет все, что следует после.

import re
basic = open('file.txt')
entries = map(lambda x : re.search(r"(SNMPv2-MIB::sys).*",x).group() if re.search(r"(SNMPv2-MIB::sys).*",x) is not None else "", basic.readlines())
non_empty_entries = list(filter(lambda x : x is not "", entries))
print(non_empty_entries)

Если вам не нравится Lambdas, скрипт, выполняемый выше, берет текст из файла, разделяетсяэто в строки и проверяет все строки индивидуально на соответствие регулярному выражению. Записи - это список всех строк, где было найдено совпадение.

РЕДАКТИРОВАТЬ vol2 Теперь, когда регулярное выражение не совпадает, добавится пустая строка и после того, как мы отфильтруем их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...