Попытка разобрать пакеты в Python и изо всех сил пытается построить правильный скрипт - PullRequest
0 голосов
/ 02 марта 2020

У меня есть огромный (например, 600 МБ) файл захвата пакетов в следующем формате:

[S->C][02][0x5A97BE]
[0047F32B] 95 DE 5E 52 4A F3 80 F5 47 18 97 70 10 EE 5B E5  ..^RJ...G..p..[.
           7C E8 F5 B2 2F 1F 3A 6B A1 8F 6C 73 65 A6 42 27  |.../.:k..lse.B'

Моя цель состоит в том, чтобы уменьшить все это, чтобы оно выглядело так:

[S->C][02][0x5A97BE]
95DE5E524AF380F54718977010EE5BE57CE8F5B22F1F3A6BA18F6C7365A64227

Я просмотрел некоторые учебники по string.split () и regex, но ни один из них, похоже, не помог мне. В основном, я пытаюсь сделать оператор if, проверяющий, содержит ли строка [S-> C] или ">" в четвертой позиции символа. Если это так, пропустите строку. Затем я хочу удалить все слева от первого пробела и все справа от двойного пробела (между шестнадцатеричным и ascii дисплеем есть двойной пробел.) их, и просто не могу заставить его разобрать правильно. Любая помощь будет потрясающей. Я знаю, что это не слишком сложно, но по какой-то причине это ускользает от меня.

1 Ответ

0 голосов
/ 02 марта 2020

Вот один из способов. Передайте входной файл как myfun(input_file)

def myfun(in_file):
    header = True
    # Get the meat, remove newlines.
    reg1 = re.compile(r'^.{11}(.{47}).*\n')
    # Remove spaces.
    reg2 = re.compile(r' ')
    with open(in_file) as f:
        for line in f:
            if header:
                # Print the header.
                print(line, end='')
                header = False
            else:
                # Print the body.
                print(reg2.sub('', reg1.sub('\g<1>', line)), end='')
    # Append a newline.
    print()
    return
...