[Python-es] Escritura en archivos binarios

Pixu Kideak pixukideak en gmail.com
Mie Ene 27 12:49:59 EST 2016


Muchas gracias,

Al final lo pude solucionar de las siguiente manera:

...
import binascii
...
archivo.seek(posicion)
valor = binascii.a2b_hex('21')  #Almacena el valor HEX en una variable para
escribirla
archivo.write(valor)
...

Un saludo y gracias por vuestra colaboración ;-)

2016-01-27 17:35 GMT+01:00 Chema Cortes <pych3m4 en gmail.com>:

>
>
> El mié., 27 ene. 2016 a las 17:28, Chema Cortes (<pych3m4 en gmail.com>)
> escribió:
>
>> El mié., 27 ene. 2016 a las 16:29, Pixu Kideak (<pixukideak en gmail.com>)
>> escribió:
>>
>>> Estoy con la versión Python 3.5.0
>>>
>>
>> with open(ficheroLeer, 'r+b') as f:
>>     f.seek(1)
>>     f.write(bytes([21])
>>
>> Según lo que sea, también podrías usar "literarles":
>>
>> with open(ficheroLeer, 'r+b') as f:
>>     f.seek(1)
>>     f.write(b'\x15')
>>
>
> Creo que he tomado mal los valores hexadecimales de la pregunta original.
> Para escribir un '!' en un fichero binario se usaría directamente b'!'
>
> with open(ficheroLeer, 'r+b') as f:
>     f.seek(1)
>     f.write(b'!')
>
>
>
>>
>>
>>
>>
>>>
>>>
>>> 2016-01-27 16:21 GMT+01:00 Chema Cortes <pych3m4 en gmail.com>:
>>>
>>>>
>>>>
>>>> El mié., 27 ene. 2016 16:12, Pixu Kideak <pixukideak en gmail.com>
>>>> escribió:
>>>>
>>>>> "
>>>>> yo intentaría leer el fichero en memoria, cambiaría alli los datos y
>>>>> luego volvería a escribir el fichero. Los discos no pueden escribir "un
>>>>> byte".
>>>>>
>>>>> "
>>>>> Cuando se esta realizando la asignación archivo = open(ficheroLeer,
>>>>> 'r+b') ¿no se estaría trabajando contra el objeto "archivo" qué está en
>>>>> memoria?
>>>>> O por el contrario, ¿te refieres a volcar todo el contenido del
>>>>> fichero en una lista y trabajar contra ésta; una vez finalizado volcar de
>>>>> nuevo el contenido de la lista al fichero?
>>>>>
>>>>
>>>> No hace falta bajar tanto de nivel. Lo más seguro es que Python
>>>> sobrescriba el fichero completo en disco, pero eso no debe preocuparte.
>>>>
>>>> Lo que si es importante es saber si usas python3. Los ficheros binarios
>>>> usan el tipo bytes y, por lo que dices, no lo estas usando.
>>>>
>>>>
>>>>> Un saludo y gracias,
>>>>>
>>>>> 2016-01-27 16:00 GMT+01:00 Juan Ignacio <euribates en gmail.com>:
>>>>>
>>>>>> yo intentaría leer el fichero en memoria, cambiaría alli los datos y
>>>>>> luego volvería a escribir el fichero. Los discos no pueden escribir "un
>>>>>> byte".
>>>>>>
>>>>>> 2016-01-27 14:40 GMT+00:00 Pixu Kideak <pixukideak en gmail.com>:
>>>>>>
>>>>>>> Buenos días,
>>>>>>>
>>>>>>> Estoy trabajando con ficheros binarios pero tengo una duda.
>>>>>>>
>>>>>>> Lo primero que hago en mi programa es buscar un valor en el fichero,
>>>>>>> a partir de esa posición  muevo el puntero X posiciones y me interesaria
>>>>>>> escribir cierto valor binario y/o HEX en esa posición.
>>>>>>>
>>>>>>> He intentado con:
>>>>>>>
>>>>>>> ficheroLeer = '/ruta/mi/fichero.bin'
>>>>>>> archivo = open(ficheroLeer,'r+b')
>>>>>>> ...
>>>>>>> archivo.seek(1) #Esta es la posición en la que me interesa modificar
>>>>>>> el contenido.
>>>>>>> archivo.write(21) #Digamos que quiero escribir ! - que HEX es 21 -
>>>>>>> en esa dirección.
>>>>>>>
>>>>>>> Pero no consigo escribirlo puesto que parece que write recibe sólo
>>>>>>> variables de tipo str.
>>>>>>>
>>>>>>> ¿Cómo podría escribir HEX21 en el fichero?
>>>>>>>
>>>>>>> Un saludo y gracias por vuestra ayuda ;-)
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Python-es mailing list
>>>>>>> Python-es en python.org
>>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Juan Ignacio Rodríguez de León
>>>>>> Móvil: 605 890514
>>>>>> E-Mail: euribates en gmail.com
>>>>>> http://www.elornitorrincoenma
>>>>>> <http://www.elornitorrincoenmascarado.com/>scarado.com/
>>>>>> <http://www.elornitorrincoenmascarado.com/>
>>>>>> http://descon2.com/
>>>>>>
>>>>>> _______________________________________________
>>>>>> Python-es mailing list
>>>>>> Python-es en python.org
>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> Python-es mailing list
>>>>> Python-es en python.org
>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>> --
>>>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>>>> http://ch3m4.org/blog
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>> http://ch3m4.org/blog
>>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20160127/93a12224/attachment.html>


Más información sobre la lista de distribución Python-es