У меня есть файл с событиями с нескольких серверов Windows, хранящихся в нем, которые не разделены (все экспортные данные находятся в одной длинной строке, иногда с вкладками, иногда нет).
Я создал регулярное выражение для извлечения информации, которую хочу сохранить в CSV (всего 20 групп совпадений), но теперь я пытаюсь циклически перебирать многие строки в файлах и выводить соответствующую информацию в формате CSV. Мой код ниже:
#!/usr/bin/env python
import csv
import re
match1 = re.compile('(\D{3} \d+ \d{2}[:]\d{2}[:]\d{2})')
<snipped for brevity>
match20 = re.compile('(?:Logon Type: (.+?) )')
regexes = [match1, match2, match3, match4, match5, match6, match7, match8, match9, match10, match11, match12, match13, match14, match15, match16, match17, match18, match19, match20]
pattern_combined = '|'.join(x.pattern for x in regexes)
print(pattern_combined)
print("End of combined regexes\n\n\n")
with open('Argus.csv', 'r') as fobj:
with open('Argus1.csv', 'w') as resultFile:
reader = csv.reader(fobj, delimiter=',')
for row in reader:
output = re.findall(r'pattern_combined',row)
print(output)
print("End of OUTPUT\n\n\n")
out_str = ','.join(output)
print(out_str)
print("Final output\n\n\n")
resultFile.write(out_str)
Там также есть небольшая отладка для моего собственного здравомыслия, пытаюсь увидеть шаги, которые он предпринимает, но мне не удается согласовать их (на print(output)
я просто получаю нулевой вывод)
Я тестировал одно регулярное выражение в одной строке и могу заставить его работать, но мне нужно расширить его до нескольких, при этом каждое совпадение экспортируется как поле в CSV и, похоже, не может прогрессировать.
изменить: добавлены образцы данных, чтобы показать требуемый тип извлечения:
<13>Mar 8 05:56:00 PHCHBS-TP320161.XX.domain.net MSWinEventLog 4 Security 364388 Thu Mar 08 05:56:00 2018 4634 Microsoft-Windows-Security-Auditing DOMAINNET\SYS_APM_XXXXXX1 N/A Success Audit PHCHBS-TP320161.XX.DOMAIN.net Logoff An account was logged off. Subject: Security ID: S-1-5-21-2025429265-1383384898-682003330-43805 Account Name: SYS_APM_XXXXXX1 Account Domain: DOMAINNET Logon ID: 0xb1dfe060 Logon Type: 3 <truncated 199 bytes> 364387
Как видите, довольно стандартные форматы событий Windows просто помещаются в файл через какой-то процесс системного журнала, который я, к сожалению, не контролирую!
Конечно, просто нужно очистить некоторые имена хостов и т. д., И я отредактирую это в вопросе, спасибо
r'pattern_combined 'преобразует буквальную строку' pattern_combined 'в необработанную строку. рассмотрите возможность изменения output = re.findall(r'pattern_combined',row)
, чтобы преобразовать значение переменной pattern_combined в rawstring
Попробуйте: output = re.findall(pattern_combined, row)
Мы могли бы лучше помочь вам, если вы опубликуете образец текстового файла, который вы пытаетесь проанализировать, и ожидаемый результат.