Python-save-file

¡No puedo más! Cada vez que creo una mejora en mi código y pienso que está terminado me piden algo nuevo y tengo que mejorar otra cosa. Menos mal que mi primo ya me advirtió que programar tiene estas cosas. Ahora el alcalde quiere que le entregue un documento con los nombres y apellidos generados para registrarlos en el boletín oficial de mi pueblo. Resulta que los concejales están que trinan por no poder verlos. No encuentro los papeles donde lo apunté. Voy a preguntar a todos los vecinos y recuperar la información…

Vale, he preguntado a dos vecinos, sólo a dos, y los dos dicen tener el mismo nombre (cosa imposible). Está claro que tengo que hacer algo, voy a buscar una solución para que los nombres generados queden almacenados y ya después convoco un pleno para asignar oficialmente los nombres noruegos desde cero.

Veamos, necesito guardar en un archivo la lista de nombres generados. Para empezar voy a crear un archivo con el código que ya tengo generado hasta ahora. Al preguntarle a mi primo me ha comentado que los archivos que llevan órdenes para ser ejecutados con un programa se llaman scripts:

guardar_en_archivo01

He incluido un print (nombre_noruego) a la función para que me muestre el nombre noruego creado y también la he llamado. He guardado el archivo en mi escritorio con el nombre nombres_noruegos.py. Voy a hacer una prueba de fuego, voy a llamar al documento desde terminal… y que Odín nos asista:

guardar_en_archivo02

Obviamente Odín me ha asistido, porque me ha generado un nombre noruego. ¡Esto marcha!

Ahora voy a hacer que el programa me pregunte una y otra vez si quiero un nuevo nombre o ya he terminado de generar nombres. Creo que sé cómo hacerlo, voy a crear una variable que tenga el valor True y un bucle que se repita mientras esa variable siga valiendo True:

Ahora voy a programar el contenido del bucle intentando que el programa por sí mismo me dé opciones tales como generar un nuevo nombre, guardar, salir, etc. ¿Qué tal una pregunta y elegir si quiero nombre de hombre o de mujer?:

print (“Que necesitas?:”)

Qué difícil es esto de escribir sin tildes, interrogaciones iniciales, etc. Esto de usar un lenguaje anglosajón tiene sus problemas…

Voy a poner la parte de generar opciones dentro del bucle while y se lo voy a enviar a mi primo a ver qué me dice, porque yo lo veo perfecto, si elijo el 1 me da un nombre de hombre, si elijo el 2 me da uno de mujer y si elijo el 3 cambia el valor de la variable seguimos a falso y se acaba el bucle while y, por lo tanto, el programa…

Vale, dice mi primo que en estos programas lo mejor es poner una última opción que sea “No tengo ni idea de qué has elegido”. Tiene su lógica, si no elijo ni 1 ni 2 ni 3 el programa me debería avisar. Lo voy a cambiar y guardar en mi archivo:

guardar_en_archivo03

Vale, ahora sólo queda probarlo. Soy un genio, he puesto varios saltos de carro \n para separar algunas cosas del código y poder encontrar la respuesta, voy a probarlo con 1 y 2:

guardar_en_archivo04

Ha salido perfecto, ahora me queda probar con cualquier número (por ejemplo, el 4) y con el 3:

guardar_en_archivo05

¡Qué bien! Ahora ya tengo un programa que puedo ejecutar las veces que quiera. Lo que ocurre es que realmente estoy generando nombres noruegos pero no los estoy guardando en mi diccionario ni estoy haciendo nada con ellos. Voy a incluir que, al seleccionar lo que quiero, me pregunte a qué vecino quiero generarle el nombre y también una opción para imprimir el diccionario:

guardar_en_archivo06

Todo cambiado. Voy a generar un par de nombres y utilizar la nueva opción para mostrar los vecinos que tengo en el diccionario:

guardar_en_archivo07

¡Perfecto! Ahora que ya tengo el programa sólo me queda aprender a guardarlo en un archivo. He estado leyendo en mis amados foros de Python y he encontrado que, para escribir en un archivo, tengo que utilizar el siguiente código:

El nombre archivo lo he elegido por parecerme adecuado, pero podría haberlo llamado de otra forma, como hijos_de_odin o algo así. La “w” indica que quiero abrirlo en modo write pero podría abrirlo en modo “r” (read). Parece ser que si el archivo no existe lo crea el propio programa en la misma carpeta donde esté el script de Python. Qué apañado.

Resulta que, para guardar mi diccionario tengo que convertirlo primero en string (texto), ya que el archivo no entiende de diccionarios:

Tras ello, para escribir en el archivo debo poner:

Y, por último, cerrar el archivo:

Creo que lo mejor será poner todas esas instrucciones dentro de la opción de salir de mi programa:

guardar_en_archivo08

Voy a probarlo…

guardar_en_archivo09

¡Por Odín! Me ha generado Python por sí solo el siguiente archivo .txt en el escritorio:

guardar_en_archivo10

Ya puedo guardar mi diccionario, pero tengo que tener una cosa en cuenta: la opción write sobrescribe un archivo, por lo que cada vez que cargue mi script nombres_noruegos.py y salga del mismo guardará el contenido de mi diccionario en el archivo, borrando lo que contenía. Quizá puedo ir guardando los nombres que genere en otro archivo manualmente mientras aprendo a solucionar este pequeño problema…

Cuando tenga un hueco, intentaré ver cómo puedo leer mi archivo al principio y guardarlo en el diccionario. Así no lo borraré cada vez que genere nuevos nombres, pero por ahora puedo acallar las voces de los concejales que claman por tener los nombres escritos en el boletín oficial. ¡Fantástico!