Título: De txt a diccionario Publicado por: SlayerBur en 30 Mayo 2021, 20:12 pm Buen día.
Quería saber si alguien sabría como hacer para que el contenido de un txt (guardado previamente con la informacion de un diccionario), luego pueda cargarlo, volver a modificarlo y guardarlo nuevamente. El guardado funciona correctamente, el problema sucede cuando cargo el texto, una vez cargado, todo lo que utilizaba el diccionario comienza a fallar. Guardado: Código: file = open("./filename.txt", "w") Código: file = open("./filename.txt", "r") Gracias de antemano Título: Re: De txt a diccionario Publicado por: DtxdF en 30 Mayo 2021, 23:56 pm Hola @SlayerBur
La cuestión es que estás abriendo el archivo en modo escritura (w), pero este modo borrará todo el contenido que tenga el archivo de destino, por lo que si haces una lectura mucho después, verás que estará vacío. Puedes hacer dos cosas. La primera es abrir y leer todo el archivo primero, pero ésto consume mucha memoria, por lo que sería útil sólo si no te importa desperciarla y también si es menos de la que está en uso. La segunda es leer línea por línea, modificarla y escribir o en la salida o en un archivo de salida diferente al que está abierto. Recomiendo la segunda para la mayoría de casos. Incluso con la segunda opción, en caso de enviar el resultado en la salida, puedes combinar ese contenido con otros programas al estilo unix usando tuberías. ~ DtxdF Título: Re: De txt a diccionario Publicado por: SlayerBur en 31 Mayo 2021, 00:06 am Hola @SlayerBur La cuestión es que estás abriendo el archivo en modo escritura (w), pero este modo borrará todo el contenido que tenga el archivo de destino, por lo que si haces una lectura mucho después, verás que estará vacío. Puedes hacer dos cosas. La primera es abrir y leer todo el archivo primero, pero ésto consume mucha memoria, por lo que sería útil sólo si no te importa desperciarla y también si es menos de la que está en uso. La segunda es leer línea por línea, modificarla y escribir o en la salida o en un archivo de salida diferente al que está abierto. Recomiendo la segunda para la mayoría de casos. Incluso con la segunda opción, en caso de enviar el resultado en la salida, puedes combinar ese contenido con otros programas al estilo unix usando tuberías. ~ DtxdF El problema no es el guardado, la idea es que remplace todo el contenido. el problema es al cargar, que no se crea el diccionario. la informacion se guarda asi: Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']Texto: ['.doc', '.pdf', '.cfg']Videos: ['.mp4', '.avi', '.flv']Otros: [] lo que quiero es que esa informacion del .txt pase a ser un diccionario asi: datos = {"Imagen":[".png",".NEF",".jpg", ".JPG"], "Texto":[".doc",".pdf",".cfg"], "Videos":[".mp4",".avi",".flv"], "Otros":[]} Título: Re: De txt a diccionario Publicado por: DtxdF en 31 Mayo 2021, 00:34 am Código
Resultado: Código: {'Imagen:': ["'.png'", "'.NEF'", "'.jpg'", "'.JPG'", "'.ao'"], Faltaría eliminar las comillas simples, pero ya eso es más fácil, o simplemente no puedes incluirlo en filename.txt. Espero te sirva. ~ DtxdF Título: Re: De txt a diccionario Publicado por: tincopasan en 31 Mayo 2021, 01:43 am partamos de la base que la sintaxis visible del guardado es un asco,no hay comas para separa los items o salto de línea en el .txt
hay muchas formas de hacerlo: Código
y todo eso se podría evitar si guardas los datos como diccionario correctamente. Título: Re: De txt a diccionario Publicado por: SlayerBur en 1 Junio 2021, 00:45 am Código
Resultado: Código: {'Imagen:': ["'.png'", "'.NEF'", "'.jpg'", "'.JPG'", "'.ao'"], Faltaría eliminar las comillas simples, pero ya eso es más fácil, o simplemente no puedes incluirlo en filename.txt. Espero te sirva. ~ DtxdF Tuve que hacer una pequeña modificacion pero ya quedo, gracias :D Título: Re: De txt a diccionario Publicado por: DtxdF en 1 Junio 2021, 02:10 am partamos de la base que la sintaxis visible del guardado es un asco,no hay comas para separa los items o salto de línea en el .txt hay muchas formas de hacerlo: Código
y todo eso se podría evitar si guardas los datos como diccionario correctamente. El problema con eval(...) es que ejecuta código arbitrario. Por ejemplo: Citar Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']Texto: ['.doc', '.pdf', '.cfg']Videos: ['.mp4', '.avi', '.flv']Otros: [__import__("os").system("whoami")] La saldría sería: Código
@SlayerBur Sí, me había faltado agregar un pequeño trozo. Línea 26: Código
El replace(...). Editado: Por cierto, y siguiendo la recomendación de @tincopasan, es recomendable colocar nuevas líneas para que sea más fácil editarlo. Por suerte el script puede leer e interpretar de la misma manera lo siguiente: Con nuevas líneas: Código: Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao'] Sin nuevas líneas: Código: Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']Texto: ['.doc', '.pdf', '.cfg']Videos: ['.mp4', '.avi', '.flv']Otros: [] La saldría sería la misma, y es más recomendable la primera opción para el que tiene que editar las extensiones. ~ DtxdF Título: Re: De txt a diccionario Publicado por: tincopasan en 1 Junio 2021, 08:59 am DtxdF bueno supongamos que los archivos no son creados por él, sino sería muy tonto poner "código malicioso" se usal literal_eval de la biblioteca ast y listo, siguen siendo muchas menos líneas de código y bibliotecas para analizar el texto, etc.
Título: Re: De txt a diccionario Publicado por: SlayerBur en 1 Junio 2021, 23:18 pm El problema con eval(...) es que ejecuta código arbitrario. Por ejemplo: La saldría sería: Código
@SlayerBur Sí, me había faltado agregar un pequeño trozo. Línea 26: Código
El replace(...). Editado: Por cierto, y siguiendo la recomendación de @tincopasan, es recomendable colocar nuevas líneas para que sea más fácil editarlo. Por suerte el script puede leer e interpretar de la misma manera lo siguiente: Con nuevas líneas: Código: Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao'] Sin nuevas líneas: Código: Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']Texto: ['.doc', '.pdf', '.cfg']Videos: ['.mp4', '.avi', '.flv']Otros: [] La saldría sería la misma, y es más recomendable la primera opción para el que tiene que editar las extensiones. ~ DtxdF El codigo es creado mediante una inteface grafica, no seria necesario usar el txt. Inclusive estoy pensando en publicar el codigo, para el que quiera usarle o modificarle :D |