2009-08-24 128 views
8

Quiero poder abrir un archivo de imagen y los valores hexadecimales byte por byte adicionales. No tengo idea de cómo hacer esto y buscar en Google "edición de byte de python" y "matriz de bytes de pitón" no surgió, sorprendentemente. ¿Puede alguien señalarme la biblioteca que necesito usar, los métodos específicos que puedo buscar en google o los tutoriales/guías?Python - Cómo editar el byte de archivo hexadecimal por byte

+0

¿Esto es algo que quiere hacer programáticamente? ¿O estás buscando un editor hexadecimal? –

+0

@david: creo que quiero hacerlo programáticamente. en mi archivo de imagen personalizada hay 7 dimensiones que definen cada píxel, y están organizadas en un solo trozo básicamente incrementándose en las 7 dimensiones. Quiero deshacer eso, separar las 7 dimensiones y volver a montarlas para que se ajusten a la especificación del archivo TIF para las imágenes. Creo que sería mejor hacerlo programáticamente, ¿sí? – sepiroth

+0

Haría la parte TIFF a través de la biblioteca PIL. – Nelson

Respuesta

8

La biblioteca estándar de Python tiene el módulo mmap, que se puede usar para hacer exactamente esto. Eche un vistazo en the documentation para obtener más información.

+1

+1. Normalmente cargaría el archivo en la memoria para editarlo como en la respuesta de la sth, pero si el archivo puede ser muy largo, mmap es mejor. Por supuesto, si el archivo es muy * muy * largo y no cabe en su espacio de direcciones, está de vuelta para abrir (ruta, 'r + b') y buscar() ... – bobince

+0

@bobince: en qué punto de su la opinión sería un archivo "demasiado largo" para ir con la respuesta de sth y pasar a mmap? – sepiroth

+0

@hatorade: el estándar abrir/leer/cerrar puede manejar archivos tan grandes como la memoria disponible, pero verá mejoras de rendimiento al usar mmap() porque solo las páginas que modifique se leerán desde el disco. Calculo que las diferencias de rendimiento significativas serán aparentes cuando el archivo llegue a un megabyte más o menos. –

4

marco El Hachoir es un conjunto de bibliotecas y utilidades de Python para analizar y editar archivos binarios:

http://pypi.python.org/pypi/hachoir-core

tenga conocimiento de los tipos de archivo comunes, por lo que este podría ser sólo lo que necesita.

10

Dependiendo de lo que desea hacerlo podría ser suficiente para open the file in binary mode y leer los datos con las funciones normales file:

# load it 
f = open("somefile", 'rb') 
data = f.read() 
f.close() 

# do something with data 
data.reverse() 

# save it 
f = open("somefile.new", 'wb') 
f.write(data) 
f.close() 

Python no le importa si la cadena contiene data "binario" o " texto "datos". Si solo quiere hacer modificaciones simples a un archivo de tamaño razonable, esto probablemente sea suficiente.

+0

Sí, solo quiero abrir un archivo de imagen personalizado y convertirlo a .tiff. este podría ser el truco, ya que básicamente estoy "deshaciendo" el algoritmo utilizado para asignar los datos de píxeles en el archivo de imagen personalizado y reorganizarlo según las especificaciones .tif – sepiroth

1

Compruebe el módulo stuct.

Este módulo realiza conversiones entre los valores de Python y las estructuras C representadas como cadenas de Python. Utiliza cadenas de formato (explicadas a continuación) como descripciones compactas de la disposición de las estructuras C y la conversión deseada a/desde los valores de Python. Esto se puede usar para manejar datos binarios almacenados en archivos o conexiones de red, entre otras fuentes.

Cuestiones relacionadas