Nano Hash - криптовалюты, майнинг, программирование

Соответствие шаблону в Python

У меня был каталог "/pcap_test", который содержит несколько файлов журналов. Каждый файл имеет шаблон, например:

Pkt: 1 (358 байт), LIFE: 1, приложение: itunes (INTO), состояние: TERMINATED, стек: /ETH/IP/UDP/itunes, ошибка: нет

Pkt: 2 (69 байт), LIFE: 2, приложение: zynga (INTO), состояние: INSPECTING, стек: /ETH/IP/UDP, ошибка: нет

Pkt: 3 (149 байт), LIFE: 2, приложение: pizzeria (INTO), состояние: TERMINATED, стек: /ETH/IP/UDP/pizzeria, ошибка: нет

В этом случае я хочу, чтобы вывод был второй строкой, потому что содержимое «Приложения» отсутствует в «Стек:»

Я написал небольшой скрипт на Python для перебора каталога, открытия каждого файла и вывода вывода:

import os
list = os.listdir("/home/test/Downloads/pcap_test")
print list
for infile in list:
  infile = os.path.join("/home/test/Downloads/pcap_test" , infile)

if os.path.isfile(infile):
str = file(infile, 'r').read()
print str

Я каким-то образом получил вывод с помощью grep, но не смог использовать его в скрипте python. Это что-то вроде:

grep -vP 'App: ([^, ]*) \(INTO\).*Stack: .*\1.*$' xyz.pcap.log | grep -P 'App: ([^, ]*) \(INTO\)'

Поскольку у меня уже есть файл с именем «str», я хочу использовать его, а не отдельные файлы журналов, для получения вывода.

Любая помощь в этом отношении будет высоко оценена.


Ответы:


1

Во-первых, я бы посоветовал не использовать такие имена переменных, как str, поскольку это имя Python для примитивного типа данных String.

Поскольку grep — это инструмент регулярных выражений командной строки, и поскольку у вас уже есть работающее регулярное выражение, все, что вам нужно сделать, это научиться использовать re модуль.

Что немного сложно, так это зафиксировать поведение grep -v. Я предлагаю читать файл построчно и печатать строку только в том случае, если она не соответствует вашему первому регулярному выражению, но соответствует второму, например:

if os.path.isfile(infile):
    with file(infile, 'r') as logFile: #this will close the file pointer automatically when you finish
        for line in logFile: #read logFile one line at a time
            firstReMatch = re.match(r'App: ([^, ]*) \(INTO\).*Stack: .*\1.*$', line) #check if this line matches your first regex
            secondReMatch = re.match(r'App: ([^, ]*) \(INTO\)', line) #check if this line matched your second regex
            if secondReMatch and not firstReMatch: #"not" to capture the inverse match
                print line #print the line.

В зависимости от ваших данных вы можете использовать re.search() вместо re.match()< /а>

19.02.2013
  • выражение: firstReMatch = re.match('App: ([^, ]*) (INTO).*Stack: .*\1.*$', строка) не будет работать в python так, как это работает в grep. Есть некоторые пробелы, о которых нужно позаботиться при использовании регулярных выражений в python (/s). Как вы указали, я пытался получить тот же результат, используя puthon; s re.findall(), но не смог прийти к какому-либо решению, так как запутался. Использование grep может потребовать вызовов подпроцесса, но я думаю, что использование regix может решить эту проблему. Просто не мог попасть в точку. 19.02.2013
  • @обучение, я не понимаю. Вы не можете преобразовать код в моем ответе в то, что хотите? Кстати, я понял, что не использовал необработанные строки (r"this is a raw string with the r in front"). Я обновил свой ответ. 19.02.2013
  • Я получил это, используя re.findall. Спасибо за помощь. 21.02.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..