Lectura y almacenamiento de enteros de longitud de byte arbitrarios desde un archivo

Estoy tratando de acelerar un analizador de archivos binarios que escribí el año pasado haciendo el análisis / la acumulación de datos en números. la capacidad de numpy para definir estructuras de datos personalizadas y absorber datos de un archivo binario en ellos se parece a lo que necesito, excepto que algunos de los campos de estos archivos son enteros sin signo de longitud “no estándar” (por ejemplo, 6 bytes). Ya que estoy usando Python 2.7, hice mi propia versión emulada de int.from_bytes para manejar estos campos, pero si hay alguna forma de leer estos campos a enteros de forma nativa en números, eso obviamente sería mucho más rápido y preferible.

Numpy no admite enteros de longitud arbitraria, y usar ctypes bitfields sería más problemático de lo que vale.

Yo sugeriría usar la segmentación vectorizada para convertir sus datos al siguiente entero de tamaño estándar más alto:

buf = "000000111111222222" a = np.ndarray(len(buf), np.dtype('>i1'), buf) e = np.zeros(len(buf) / 6, np.dtype('>i8')) for i in range(3): e.view(dtype='>i2')[i + 1::4] = a.view(dtype='>i2')[i::3] [hex(x) for x in e]