Я хочу проанализировать большие двоичные файлы (5 ГБ) в кадрах Python.Файл содержит разные пакеты, которые должны входить в разные фреймы данных.Каждый пакет содержит переменные типа c.Файлы содержат поврежденные данные, поэтому синтаксический анализ должен быть надежным.
Я успешно написал анализатор, но он идет медленно.Я анализирую пакет за пакетом с struct.unpack
и добавляю данные в список для каждого типа пакета.Как только я закончу синтаксический анализ, я создаю кадры данных из списков.По мере увеличения размера файла преобразование списков в кадры данных занимает все больше и больше времени.
Кажется настолько неэффективным сначала размещать данные в списках, а затем помещать их в кадры данных.Кроме того, кажется неуместным позволять пандам обрабатывать типы, когда я точно знаю, какой тип c имеет каждый столбец.
Имеет ли смысл предварительно выделить большой массив данных с правильным типом для каждого столбца и заполнить его?при разборе?Стоит ли выделять и заполнять массивы в c, а затем как-то оборачивать массив данных?Или есть элегантный способ передать итератор пандам и позволить ему обрабатывать все?Я изучил функции разбора панд, такие как read_csv, но он кажется настолько сложным, что я полностью потерялся.
Любая помощь будет принята с благодарностью
Подробнее о двоичных файлах:
Данные упакованы следующим образом: h0
h1
id
size
data
checksum
, где h0
и h1
- заголовокбайт, id
- это идентификатор пакета, который решает, в какой кадр данных отправлять данные, size
- размер данных, data
- данные, состоящие из различных типов c (uint8, float и т. д.).