Resultados 1 al 2 de 2

Cómo cargo un archivo binario txt desde la consola de python en array

  1. #1
    Fecha de ingreso
    Dec 2007
    Mensajes
    37

    Cinema4d Como cargo un archivo binario o txt desde la consola de python en array?

    Hola, estoy intentado hacer un conversador de formato mch, es de un juego y desconocido para los programas de 3d, los archivos son de los personajes principales y lo se por que los abrí con un programa que te los muestra y exporta, pero lo exporta mal al no conocerse todo el formato, aparte de que no te deja hacer la inversa pasar de (*.3ds) a.mch que es lo que más me interesaría hacer. Tengo la documentación del formato que gente descubrió aunque no está completa del todo.

    El planteamiento que hice es intentar abrir el archivo.mch en Python desde Blender en un array, el motivo de esto es que con el Api de Blender coger las variables que forman la malla del.mch y crearlas en malla, en principio hacer esto es fácil, pero me da error al abrir el archivo probé con:
    Var1 open (nombre, mch, r).

    Y me da como bueno, pero no soy capaz de leer las variables, me lo da como vació.

    También intente pasarlo el mch a hexadecimal e intente hacer lo mismo no me deja leerlo las variables sueltas, pero si pongo la variable que la enlace me la muestra entera, pero me lo muestra en hexadecimal.

    Abierto desde archivo la variable var1.

    Me aparece 0 por 2, 0x0f, 0x0c, (que es como tal aparece el archivo).

    Que en teoría sería lo mismo cuando hago esto.

    Var1 = 0 por 2, 0x0f, 0x0c, pero en este caso las variables se verían en decimal, si escribo var1 me las muestra en decimal.

    Intente pasar los datos a otra variable, pero no lo conseguí.

    Intente crear un array hexadecimal desde un archivo.py y no colo, pero si me lo abre.

    Aunque no consiga completar el programa 100% funcional lo dejare libre.
    ¿Cómo podría abrirlo como variables normales?
    Muchas gracias.

    Edito: si lo escrino así:
    A= open nombre, txt,r) # el archivo en hexadecimal puro.

    E.read ().

    E # y pulsando intro.

    Me muestra todo el archivo, pero la cosa es que me lo muestra como tal, sin pasarlo a Hex.

    Además no sé cómo pasarlo a una variable para que me los pille como variables.
    Última edición por opengl; 02-06-2010 a las 00:11

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    Para cargar un archivo binario en un array desde Python, debes usar el modo de apertura binario. El problema es que usaste open(nombre, r) que es para texto. Para binarios necesitas open(nombre, rb).

    Aquí tienes la forma correcta. Primero, abre el archivo en modo lectura binaria. Luego, lee todo el contenido en una variable. Este contenido será un objeto de tipo bytes. Si necesitas acceder a los valores numéricos de cada byte, puedes convertirlo a una lista de enteros. Cada entero corresponderá al valor decimal de un byte del archivo, de 0 a 255.

    Por ejemplo, el código sería así:

    archivo = open(ruta_del_archivo.mch, rb)

    datos_bytes = archivo.read()

    archivo.close()

    array_de_bytes = list(datos_bytes)

    Ahora tienes en array_de_bytes una lista donde cada elemento es el valor decimal de un byte del archivo. Si el primer byte del archivo es 0x0F, en la lista aparecerá como el entero 15.

    Si necesitas trabajar con estos datos como hexadecimales para entender la estructura, puedes imprimirlos en ese formato. Pero para procesarlos en Python, es más práctico usar la lista de enteros. Puedes navegar por la lista usando índices, por ejemplo array_de_bytes[0] te dará el primer byte.

    Para Blender, una vez que tengas esta lista, puedes analizarla según la documentación del formato MCH. Extraerás los offsets, los tipos de datos, y finalmente las coordenadas de vértices, caras y normales para construir la malla.

    Si el archivo tiene estructuras más complejas con enteros de 2 o 4 bytes, no puedes usar simplemente list(datos_bytes). En ese caso, debes usar el módulo struct para desempaquetar los datos. Por ejemplo, para leer un entero de 4 bytes (uint32) desde el principio de los datos, harías: import struct y luego valor = struct.unpack_from(I, datos_bytes, offset)[0]. Esto requiere conocer el layout exacto del archivo.

    Empieza por lo básico. Abre el archivo en modo binario, conviértelo a una lista de enteros y examina los primeros valores para ver si coinciden con lo que esperas según la documentación. A partir de ahí, podrás escribir el código para interpretar cada sección del formato.

Temas similares

  1. Blender Ejecutar script Blender desde consola dos
    Por estejorge en el foro Plugins y Scripts
    Respuestas: 1
    : 04-01-2026, 06:14
  2. Respuestas: 6
    : 29-01-2022, 20:51
  3. 3ds Max Cómo cargo mis atajos archivo kbd en el 3ds Max 2013 archivo kbdx
    Por wanyaes en el foro Programas de Diseño 3D y CAD
    Respuestas: 2
    : 18-01-2013, 19:09
  4. YafRay Renderizar en red desde consola con YafRay
    Por gigo en el foro Render, Iluminación y Cámaras
    Respuestas: 2
    : 24-04-2009, 00:43
  5. Blender Sugerencias Blender mas Python se puede aceder a un archivo Blender desde otro
    Por yeclapa en el foro Programas de Diseño 3D y CAD
    Respuestas: 4
    : 27-04-2006, 22:02