Прошу помощи с NumPy
У меня есть логи с платы, записывающей массив строчных данных типа
t = 5240, red = 18122, ired = 23268
t = 5244, red = 18173, ired = 23253
t = 5248, red = 18186, ired = 23279
мне необходимо получить три структуры данных типа np.array после парсинга данного файла pulse_data.log, но что-то не получается разделить массив в цикле с ошибкой ValueError: array split does not result in an equal division
file = open('pulse_data.log', 'r')
np.lines = file.read().splitlines()
file.close()
for i in range(len(np.lines) - 1):
digits = re.compile(r"\d+\d+\d+")
np.lines[i] = digits.findall(np.lines[i])
np.lines[i] = [int(item) for item in np.lines[i]]
np.lines[i] = np.array(np.lines[i])
np.lines[i] = np.split(np.asarray(np.lines[i]), 3)
print(np.lines)
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Применяя регулярные выражения нужно проверять что они срабатывают как ожидается. Если нет, печатать предупреждение, чтобы программист (вы) мог разобраться. Кроме того, начинать надо с как можно более жёсткого формата:
def parse_log(log):
t = []
red = []
ired = []
for line in log:
m = re.search(r't = (\d+), red = (\d+), ired = (\d+)', line)
if m is None:
print('warning: cannot parse line', repr(line))
else:
t.append(int(m.group(1)))
red.append(int(m.group(2)))
ired.append(int(m.group(3)))
return map(np.array, (t, red, ired))
Применять так:
with open('pulse_data.log') as f:
a, b, c = parse_log(f)
print(a)
print(b)
print(c)