Saltar al contenido

Leyendo un archivo binario con Python

octubre 23, 2021
apple touch icon@2

Yo también encontré que Python faltaba cuando se trataba de leer y escribir archivos binarios, así que escribí un pequeño módulo (para Python 3.6+).

Con archivo binario harías algo como esto (supongo, ya que no conozco a Fortran):

import binaryfile

def particle_file(f):
    f.array('group_ids')  # Declare group_ids to be an array (so we can use it in a loop)
    f.skip(4)  # Bytes 1-4
    num_particles = f.count('num_particles', 'group_ids', 4)  # Bytes 5-8
    f.int('num_groups', 4)  # Bytes 9-12
    f.skip(8)  # Bytes 13-20
    for i in range(num_particles):
        f.struct('group_ids', '>f')  # 4 bytes x num_particles
    f.skip(4)

with open('myfile.bin', 'rb') as fh:
    result = binaryfile.read(fh, particle_file)
print(result)

Lo que produce una salida como esta:

{
    'group_ids': [(1.0,), (0.0,), (2.0,), (0.0,), (1.0,)],
    '__skipped': [b'x00x00x00x08', b'x00x00x00x08x00x00x00x14', b'x00x00x00x14'],
    'num_particles': 5,
    'num_groups': 3
}

Usé skip () para omitir los datos adicionales que agrega Fortran, pero es posible que desee agregar una utilidad para manejar los registros de Fortran correctamente. Si lo hace, sería bienvenida una solicitud de extracción.

close