Форум сайта python.su
Ребят… Только начал заниматься Python.
Прошу помощи. Задача не сложная. Но пару вопросов имеется…
Так вот имеются log_i лог в txt, так вот открыть файл не проблема проверить нужные строки тоже не проблема. Но там на разных логах разные IP адреса. Так вот как из файла к примеру зная 2 строчки 100% одинаковые изъять из текстового файла и внести в новую переменную?
Вывод должен быть примерно такой
add adress = 1.1.1.1\24 вообщем целая строка целиком. Файл создан списком… По строкам…
Начал с этого для проверки, находит ли. Он нашёл. Всё круто но теперь нужно эту строчку вытащить в переменную из текстового файла…
ip_conf = 'add address=1.1.0.1/24 interface=bridge1 network=1.1.1.0' f = open('conf_.txt', 'r') my_files = f.read() if ip_conf in my_files: print("Тут есть эта надпись") else: print('тут нету этих строк')
Офлайн
не распарсил
Офлайн
FishHookМожно модуль Шерлока Холмса подключить. Метод дедукции, который на самом деле метод дедукции + индукции + дедукции +индукции ….
не распарсил
>> >>> text = """\ ... abc ... abc ... localhost:1234 ... def ... def ... localhost:5678 ... ghi ... ghi ... """ >>> >>> pat = r':' >>> >>> patc = re.compile(pat) >>> >>> list(filter(patc.search, text.splitlines())) ['localhost:1234', 'localhost:5678'] >>>
Отредактировано py.user.next (Фев. 11, 2017 13:57:14)
Офлайн
py.user.next
Верно, я прописал целую строчку записи в логах, но в логе есть и другие ip адреса. Внешние и внутренние, соответственно разные… Если писать как я написал пример… Тогда смысла в программе нет, и просто тупо можно руками всё разделить… Но там таких логов очень много…
А нужно чтобы из каждого лога… Автоматом программа отсеивала лишнее, оставляла именно эти строки с ip и эти записи в новый файл записывала…
Офлайн
Swell84Так приведите отрезок лога, покажите что хотите из него выделить. Напишите как хотели это сделать.
А нужно чтобы из каждого лога…
Офлайн
Swell84Надо входной файл приложить (короткую выдержку из лога).
Верно, я прописал целую строчку записи в логах, но в логе есть и другие ip адреса.
Офлайн
py.user.next
doza_and
Вот пример лога
# feb/10/2017 12:00:02 by RouterOS 6.37.1
# software id = AVHU-21AV
#
/interface bridge
add mtu=1500 name=bridge1
/interface ethernet
set disabled=yes speed=100Mbps
/interface pptp-client
add connect-to=34.34.0.186 mrru=1600 name=GO user=4501
/interface wireless security-profiles
set supplicant-identity=MikroTik
add authentication-types=wpa2-psk eap-methods=“” management-protection=\
allowed mode=dynamic-keys name=profile1 supplicant-identity=“”
add authentication-types=wpa2-psk eap-methods=“” management-protection=\
allowed mode=dynamic-keys name=profile2 supplicant-identity=“”
/interface wireless
set band=2ghz-b/g/n disabled=no frequency=2442 \
max-station-count=20 mode=ap-bridge radio-name=MB_4501 rx-chains=0 \
security-profile=profile1 ssid=MB_4501 tx-chains=0 wireless-protocol=\
802.11
add default-forwarding=no disabled=no mac-address=02:0C:42:A6:1F:FF \
master-interface=wlan1 max-station-count=20 mode=ap-bridge name=wlan2 \
security-profile=profile2 ssid=MBR_Guest wds-cost-range=0 \
wds-default-cost=0
/interface wireless nstreme
set wlan1 enable-polling=no
/ip neighbor discovery
set wlan2 discover=no
/ip ipsec proposal
set enc-algorithms=3des
/ip pool
add name=LAN ranges=10.10.10.50-10.10.10.100
add name=Guest ranges=192.168.0.50-192.168.0.100
/ip dhcp-server
add address-pool=LAN disabled=no interface=bridge1 lease-time=3d name=dhcp1
add address-pool=Guest disabled=no interface=wlan2 lease-time=3d name=dhcp2
/queue simple
add max-limit=2M/2M name=Video target=10.10.10.2/32
/snmp community
set addresses=23.34.13.55/32
/system logging action
set 0 memory-lines=100
set 1 disk-lines-per-file=100
/interface bridge port
add bridge=bridge1 interface=ether1
add bridge=bridge1 interface=ether2
add bridge=bridge1 interface=ether5
add bridge=bridge1 interface=ether6
add bridge=bridge1 interface=ether7
add bridge=bridge1 interface=ether8
add bridge=bridge1 interface=ether9
add bridge=bridge1 interface=wlan1
add bridge=bridge1 interface=ether10
/interface bridge settings
set use-ip-firewall=yes
/ip address
add address=1.1.1.1/24 interface=bridge1 network=10.10.10.0
add address=55.34.56.123/24 interface=ether4 network=88.82.179.0
add address=192.168.0.1/24 interface=wlan2 network=192.168.0.0
Подчёркнутые строчки, нужно вытащить и закинуть отдельно в другой файл…
Вроде не сильно сложно, но таких логов с разными ip много. Нужно автоматизировать процесс.
После обработки должно выглядеть так. Только в другом txt файле не затрагивая этот…
add address=1.1.1.1/24 interface=bridge1 network=10.10.10.0
add address=55.34.56.123/24 interface=ether4 network=88.82.179.0
add address=192.168.0.1/24 interface=wlan2 network=192.168.0.0
Отредактировано Swell84 (Фев. 12, 2017 02:26:19)
Офлайн
ну тут вроде как надо найти признаки которые отличают нужные строки от остальных. я увидел что после последнего вхождения символа = строка содержит 3 точки и только числа (если убрать точки) можно еще проверять что если строку разделить по точке то список будет содержать 4 элемента и все только числа(даже диапазон можно задать)
ну вобщем пока так как самый простой вариант
def correckt(x): return True if x.count('.') == 3 and ''.join(x.split('.')).isdigit() else False with open('log.txt') as inp: text = inp.read().split('\n') for string in text: sample = string [string.rfind('=')+1:] if correckt(sample): print (string)
add address=1.1.1.1/24 interface=bridge1 network=10.10.10.0 add address=55.34.56.123/24 interface=ether4 network=88.82.179.0 add address=192.168.0.1/24 interface=wlan2 network=192.168.0.0
Отредактировано marvellik (Фев. 12, 2017 07:43:57)
Офлайн
Мне кажется можно проще сделать
for i in open("a.dat"): if i.startswith("add address="): print(i.strip())
grep "add address=" a.dat >b.txt
File a.dat: add address=1.1.1.1/24 interface=bridge1 network=10.10.10.0 add address=55.34.56.123/24 interface=ether4 network=88.82.179.0 add address=192.168.0.1/24 interface=wlan2 network=192.168.0.0
Офлайн
doza_andТоже не понимаю, зачем питон здесь, если grep можно использовать. Если только дело в винде какой-нибудь, где питон проще поставить, чем grep.
Но вообще для фильтрации есть специальные утилиты и языки grep
doza_andА perl ему нафига? Вот sed стоило бы упомянуть.
grep, awk, perl
Swell84Надо было сделать архив с файлами и присоединить к сообщению. Иначе символы могут пропадать, так как движок форума их вырезает, так как считает ненужными для чтения. Можешь и теги code использовать, они как раз для точной передачи текста сделаны на всех форумах.
Вот пример лога
Вот так пишешь, и [квадратные скобки] и другие символы (вроде лишних пробелов - " " ) сохраняются.
Отредактировано py.user.next (Фев. 12, 2017 08:59:40)
Офлайн