Нарезать двоичный файл на несколько файлов в python на основе шаблона - PullRequest
0 голосов
/ 28 января 2020

У меня есть бинарный файл. Он имеет несколько строк, но я не могу выполнить readlines, так как файл является двоичным, а также иногда новой строкой является \ r, \ n, \ r \ n. Файл выглядит следующим образом

orange binarydata
binary data
binary data
orange binarydata
binary data

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

f = open("data.ir", "rb")
allSignal = f.read()
signalList = re.findall(b'(orange .*?)(orange)+', allSignal, re.DOTALL)

for line in (signalList):
    print(line[0])

, но не удается захватить последний оранжевый в конец файла. Дайте мне знать, как это решить.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Почему бы просто не найти индексы двух апельсинов и не вырезать средний бит?

with open('data.ir', 'rb') as f:
    all_signal = f.read()

orange1 = all_signal.index('orange')
orange2 = all_signal.index('orange', orange1)

if orange2 == -1:
    # second orange not found, read to end of file
    signals = all_signal[orange1:]
else:
    signals = all_signal[orange1:orange2+len('orange')]
print(signals)
0 голосов
/ 28 января 2020

Вы можете попробовать этот подход:

 orange(.*)(?=orange)|orange(.*)

Regex101 Sample

...