Muy buenas tardes a todos aprovecho este correo también por la siguiente duda, estoy tratando (y digo tratando por que estoy recién comenzando en la programación ya que vengo del lado networking) de hacer algo similar a lo que señala pixu, mas que nada quiero en un archivo encontrar palabras, seleccionar la linea que se encuentra esta palabra y escribirlas en un archivo en formato CSV, algún código de ejemplo para realizar eso?
Saludos El 27 de enero de 2016, 17:05, Pixu Kideak <pixukid...@gmail.com> escribió: > Buenas tardes, > > Tras ver cómo se puede modificar el contenido de una posición concreta en > un fichero que abro en modo binario tengo una duda con un experimento que > deseo realizar. > > Tengo un fichero que he abierto con un editor HEX, tengo "fichados" unas > cadenas -sé su valor en ASCII y HEX gracias al editor - . > > Lo que quiero hacer es, buscar la cadena en el fichero (así podría > conseguir la dirección de inicio de la cadena). A partir de dónde empieza > la cadena sumarle una cantidad y poder posicionar el puntero en la posición > deseada para cambiar su contenido. > > Una vez la idea esta clara, la duda que tengo es: > > ¿El fichero sólo se puede abrir de 1 modo? Suponiendo que sólo se podría > abrir en modo binario para poder realizar la modificación a nivel de byte, > ¿Cómo se podría realizar la búsqueda de la cadena para obtener la > dirección? ¿A la hora de buscar un patrón éste debería estar en HEX no? > > No sé si lo estoy enfocando correctamente y/o me estoy complicando ¬_¬" > > Un saludo y gracias, > > > > > 2016-01-27 18:49 GMT+01:00 Pixu Kideak <pixukid...@gmail.com>: > >> 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 <pych...@gmail.com>: >> >>> >>> >>> El mié., 27 ene. 2016 a las 17:28, Chema Cortes (<pych...@gmail.com>) >>> escribió: >>> >>>> El mié., 27 ene. 2016 a las 16:29, Pixu Kideak (<pixukid...@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 <pych...@gmail.com>: >>>>> >>>>>> >>>>>> >>>>>> El mié., 27 ene. 2016 16:12, Pixu Kideak <pixukid...@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 <euriba...@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 <pixukid...@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@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: euriba...@gmail.com >>>>>>>> http://www.elornitorrincoenma >>>>>>>> <http://www.elornitorrincoenmascarado.com/>scarado.com/ >>>>>>>> <http://www.elornitorrincoenmascarado.com/> >>>>>>>> http://descon2.com/ >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Python-es mailing list >>>>>>>> Python-es@python.org >>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>>> >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> Python-es mailing list >>>>>>> Python-es@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@python.org >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>> >>>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es@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@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/