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
Respuesta
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. 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
@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
@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. –
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.
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.
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
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.
- 1. usando java.util.Scanner para leer un byte de archivo por byte
- 2. ¿por qué byte + = 1 compilar pero byte = byte + 1 no?
- 3. Cómo leer archivos binarios byte por byte en Node.js
- 4. C# Convertir Char a Byte (representación hexadecimal)
- 5. byte + byte = resultado desconocido
- 6. Byte Array en Python
- 7. Java: byte [] a Byte []
- 8. Java - Byte [] a byte []
- 9. ¿Cómo se lee un byte de archivo por byte en Python y cómo imprimir un bytelist como un binario?
- 10. python y byte desbordante?
- 11. JavaScript archivo en byte []
- 12. varchar2 (n BYTE | CHAR) por defecto -> CHAR o BYTE
- 13. Convierta una cadena hexadecimal en un byte en Java
- 14. Cómo leer un byte y guardar el valor ASCII de byte en entero en C++
- 15. ¿Cómo siempre producir byte por byte .exe idéntico en la reconstrucción de la aplicación C#?
- 16. C: sobrescribir otro byte función a byte
- 17. ¿Cómo borro explícitamente el byte []
- 18. Al añadir un byte [] para el final de otro byte []
- 19. ¿Cómo obtener un solo byte de BitArray (sin byte [])?
- 20. En Java: ¿Cómo comprimir el archivo de la matriz byte []?
- 21. xor cada byte con 0x71
- 22. Buscando byte []
- 23. Python - el códec 'ascii' no puede decodificar el byte
- 24. Cómo convertir int [] a byte []
- 25. Diferencia entre Byte vs Byte tipos de datos en C#
- 26. Usando Python ¿Cómo puedo leer los bits en un byte?
- 27. Longitud máxima de byte []?
- 28. ¿Qué es el archivo de byte-caché de GWT?
- 29. es el byte de Java el mismo que el byte de C#?
- 30. CGImage from byte array
¿Esto es algo que quiere hacer programáticamente? ¿O estás buscando un editor hexadecimal? –
@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
Haría la parte TIFF a través de la biblioteca PIL. – Nelson