LAD00704 ProgramacionPython T5
LAD00704 ProgramacionPython T5
2
Escribir y leer un archivo de texto
INDICE
INDICE........................................................................................................................................................................... 3
4. LEER UN ARCHIVO................................................................................................................................................ 20
9. RETO 1 .................................................................................................................................................................... 40
3
Programación con código: Python
1. ESCRIBIR EN UN ARCHIVO
Todos los scripts que hemos hecho hasta ahora tienen un pequeño problema. Todo cambio en
el programa que se realiza durante la ejecución del mismo (valores añadidos a listas o
diccionarios, variables, etc) se pierden una vez cerramos el programa. Si queremos repetir el
proceso ninguno de los valores que se hayan generado existirán una vez reiniciado el script.
Vamos a aprender a guardar datos en un archivo de texto, de forma que puedan ser
incorporados de nuevo al reiniciar el programa y utilizados para, por ejemplo, guardar valores
en variables o listas. Imagina que queremos un script que nos haga la media de las
temperaturas de los últimos 20 días a las 12 del medio día. Para ello, obviamente, debe existir
una forma de introducir la temperatura, pero imagina que se introduce manualmente a esa
hora. ¿Por qué vamos a tener un script funcionando 20 días? En realidad basta con que
funcione a las 12 para introducir la temperatura, pero con lo que sabemos hasta ahora cuando
se cerrase el script esa temperatura introducida se perdería.
Hay muchas maneras de guardar estos cambios y de volver a utilizarlos una vez se vuelve a
ejecutar el programa, pero vamos a utilizar la más sencilla de todas y más idónea para el nivel
de conocimientos de Python llegados a este punto.
Vamos a ver una forma de escribir en un archivo de texto y de leer posteriormente el contenido
del archivo.
De la misma forma que imprimimos valores de nuestros scripts, podemos guardar en archivos
información de cualquier tipo (variables, listas, diccionarios…). El proceso de guardado y
reutilización del archivo para futuras ejecuciones del script no es complejo, pero si tiene
muchas posibilidades así que vamos a empezar con algo asequible y tras ello se puede ir
iterando y mejorando el uso de estas funciones de Python.
4
Escribir y leer un archivo de texto
Al abrirlo, así mismo, debemos indicar en qué modo lo abre o, dicho de otra forma, qué
queremos de ese archivo, si vamos a escribir, si vamos a leerlo, si queremos sobreescribir la
información, pues Python tiene varias posibilidades en esta línea:
Empecemos con el último modo, escritura, ya que es lo que inicialmente vamos a necesitar.
Voy a reutilizar un código del tema pasado para tal fin:
nombres = []
cantidad_nombres = input ("¿Cuántos nombres quieres introducir en la
lista?: ")
cantidad_nombres = int (cantidad_nombres)
for numero in range(cantidad_nombres):
numero_texto = str(numero + 1)
nombre_elegido = input("Nombre número "+numero_texto+": ")
nombres.append(nombre_elegido)
print (nombres)
5
Programación con código: Python
Recuerda que dicho programa nos permitía almacenar nombres en una lista. Vamos ahora a
hacer que el script, al finalizar, almacene los nombres en un archivo para poder tenerlos
guardados. Para ello tendremos que hacer una secuencia de tres acciones muy sencillas:
3. Cerrar el archivo.
Es importante siempre cerrar un archivo tras haber terminado de usarlo o podemos tener
problemas de acceso posterior a la información que contenga si no lo hacemos o bien perderla.
Como lo que vamos a guardar son nombres, llamaremos nombres al archivo, y como es de
texto, su extensión será .txt, que es la extensión para texto plano (la que usa el bloc de notas,
por ejemplo). Como nuestra idea es utilizar la información para el script de Python no
necesitamos usar un documento de texto con texto enriquecido y formateado (el que nos
proporcionaría un Word o similar) sino que nos basta con almacenar texto sin más.
nombres = []
cantidad_nombres = input ("¿Cuántos nombres quieres introducir en la
lista?: ")
cantidad_nombres = int (cantidad_nombres)
for numero in range(cantidad_nombres):
numero_texto = str(numero + 1)
nombre_elegido = input("Nombre número "+numero_texto+": ")
nombres.append(nombre_elegido)
print (nombres)
archivo = open("nombres.txt","w")
for nombre in nombres:
archivo.write (nombre + "\n")
archivo.close()
6
Escribir y leer un archivo de texto
Como ves, es sencillo. Debemos indicar a Python que abra con la función open( ) un archivo
llamado nombres.txt (el nombre de archivo entre comillas siempre) y guardamos el archivo
abierto bajo un nombre, en nuestro caso archivo (a efectos prácticos podemos decir que está
utilizando una variable para ubicar el archivo abierto). En la misma instrucción indicamos que
queremos que el archivo se abra en modo “w”, es decir, modo escritura (write en inglés).
Tras abrir el archivo indicamos a Python lo que queremos almacenar en el archivo con la
función .write. En nuestro caso recorremos la variable nombres con un for y vamos guardando
cada elemento que contiene en el archivo. El comando \n indica un salto de carro, es decir, que
separe los elementos en líneas diferentes.
Tras ello indicamos que queremos cerrar el archivo con la función .close( )
7
Programación con código: Python
El código para incluir nombres en una lista ya nos era conocido, pero veamos qué ha pasado
en mi escritorio tras ejecutar el script:
Se ha generado un archivo .txt llamado nombres. Dicho archivo debería contener los nombres
introducidos en la lista del script, veamos que contiene abriéndolo:
Efectivamente, se han guardado los nombres que pusimos en la lista. Prueba todo lo anterior
en tu equipo antes de seguir. Puedes probarlo varias veces seguidas y verás que el archivo se
vuelve a abrir y se guardan los nuevos nombres pero se borran los que anteriormente habías
guardado.
8
Escribir y leer un archivo de texto
Python no permite almacenar en un archivo una lista directamente, sólo permite almacenar
strings, por ello hemos recorrido la lista para almacenar sus elementos, que eran strings. Pero
si tenemos una lista que contiene otro tipo de datos o bien queremos guardar la lista entera
debemos convertirla en string previamente. Veamos cómo sería:
nombres = []
cantidad_nombres = input ("¿Cuántos nombres quieres introducir en la
lista?: ")
cantidad_nombres = int (cantidad_nombres)
for numero in range(cantidad_nombres):
numero_texto = str(numero + 1)
nombre_elegido = input("Nombre número "+numero_texto+": ")
nombres.append(nombre_elegido)
print (nombres)
archivo = open("nombres.txt","w")
nombres = str(nombres)
archivo.write(nombres)
archivo.close()
9
Programación con código: Python
Como puedes ver, al convertir a string una lista, Python mantiene todas las partes de su
estructura (los corchetes, las comillas, las comas…). Por lo que puede ser una forma de
almacenar los datos algo más incómoda para trabajar posteriormente con ellos. No tenemos un
nombre por línea, tenemos un conjunto de caracteres todos seguidos entre los que hay
nombres, pero pensando en modo “máquina” entenderemos rápidamente que para Python no
es sencillo extraer un grupo de caracteres de un texto interpretando que se corresponden con
un nombre. Para Python tiene tanto sentido [´Alfr como aría´, [Ju, simplemente son trozos de
texto. Nosotros como seres humanos vemos claramente los tres nombres separados por
comas, comillas, corchetes, espacios… Y justo esos caracteres que separan los nombres
serán claves posteriormente para aislar los nombres, pero aún es pronto para ello.
10
Escribir y leer un archivo de texto
Si queremos añadir texto deberíamos dar al usuario la opción de decidir si quiere seguir
añadiendo nombres o empezar de nuevo la lista. Observa este código, cópialo, pruébalo y trata
de entender todas sus partes:
nombres = []
intencion = input ("¿Quieres introducir más nombres en la lista existente o
quieres \n empezar una nueva lista? (1: Más nombres, 2: Nueva lista): ")
cantidad_nombres = input("¿Cuántos nombres quieres introducir en la lista?:
")
cantidad_nombres = int(cantidad_nombres)
for numero in range(cantidad_nombres):
numero_texto = str(numero+1)
nombre_elegido = input("Nombre número "+numero_texto+": ")
nombres.append(nombre_elegido)
print(nombres)
if intencion == "1":
archivo = open("nombres.txt","a")
for nombre in nombres:
archivo.write (nombre)
archivo.close()
elif intencion == "2":
archivo = open("nombres.txt","w")
for nombre in nombres:
archivo.write (nombre)
archivo.close()
11
Programación con código: Python
Simplemente preguntamos inicialmente si queremos escribir en un archivo nuevo (da igual que
exista, el comando “w” sobreescribe todo el contenido) o bien escribir al final de un archivo
existente. Tras elegir que opción queremos hacemos una cosa u otra en función de la
respuesta.
Prueba el script anterior las veces que quieras, aquí tienes una captura de la prueba del mismo
para crear una nueva lista primero y luego guardar nuevos nombres sobre la misma:
12
Escribir y leer un archivo de texto
¿Ya lo has probado? ¡Perfecto! Con las nociones que posees del tema anterior puedes recorrer
cualquier lista o diccionario y guardarlo en un archivo en cualquiera de las dos formas que
hemos visto. También puedes guardar el contenido de cualquier variable, e incluso podrías
terminar siempre un programa preguntando con un input “¿Hay algo que quieras guardar?” y
guardar aquello que el usuario escriba en texto directo.
Es posible que te preguntes para qué iba alguien querer hacer algo tan enrevesado para
reproducir una función directa de un archivo de texto, es decir, en un archivo de texto puedes
guardar los nombres que quieras directamente escribiendo, sin script ni nada parecido…
Bueno, la gracia viene cuando introduces las opciones de Python para que lo que almacenes
tenga una verdadera utilidad.
Pongamos un ejemplo: quiero asignar un número a cada uno de los miembros de un grupo de
personas. Podría simplemente introducirlas aleatoriamente en una lista y el número que le
corresponde es el índice que ocupan en la lista (o bien el índice + 1 por aquello de que nadie
tenga el número 0). Tras realizar la lista aleatoria se guarda en un archivo y así la tenemos
para cuando queramos mirarla.
Veamos cómo sería ese programa para una lista de 5 personas. Lo primero que tenemos que
aprender es a generar números aleatorios y para ello importaremos una nueva librería, random:
import random
13
Programación con código: Python
A continuación vamos a generar una lista de tantos números aleatorios como necesitemos.
Para ello podemos preguntar al usuario cuantos nombres quiere introducir aleatoriamente en
una lista y utilizar esa información:
import random
cantidad = input("¿Cuántos nombres quieres introducir aleatoriamente en la
lista?: ")
cantidad = int(cantidad)
Ya sabes cómo conseguir que el script pregunte una y otra vez al usuario si, al intentarlo, la
respuesta dada no puede ser convertida en int por no ser un número entero. Nunca
deberíamos dar por concluido un script que puede generar un error.
Ahora vamos con el código para generar números aleatorios que no se repitan. Vamos a
describirlo con lenguaje humano y posteriormente vemos cómo se dice en lenguaje Python:
Para Python esto se dice de una forma un poco diferente, pero lo único nuevo sería saber
cómo se genera un número aleatorio. La instrucción para generar aleatorios es random.randint
seguida de dos parámetros que indican entre qué dos valores debe estar el aleatorio:
random.randint(a,b), siendo a y b dichos valores, ambos incluidos.
Sigamos pues con nuestro script. Como tenemos que generar tantos números como personas
queramos en la lista usaremos un for:
import random
cantidad = input("¿Cuántos nombres quieres introducir aleatoriamente en la
lista?: ")
cantidad = int(cantidad)
for numero in range(cantidad):
14
Escribir y leer un archivo de texto
aleatorio = random.randint(1,cantidad)
print(aleatorio)
Prueba el script anterior para que veas su funcionamiento. Ten cuidado de no tener ningún
archivo llamado random en el directorio donde se encuentre tu script, ya que Python da
problemas si hay archivos con nombres de librerías en la ubicación del script que ejecuta.
Prueba introduciendo un número en torno a 10.
Como verás ha elegido 10 números aleatoriamente, pero algunos se repiten. Para que no se
repita podemos ir metiéndolos en una lista y, al generar uno nuevo, comprobamos si está en
la lista y si es así generamos uno nuevo, en caso contrario lo introducimos en la lista:
import random
cantidad = input("¿Cuántos nombres quieres introducir aleatoriamente en la
lista?: ")
cantidad = int(cantidad)
aleatorios = []
for numero in range(cantidad):
aleatorio = random.randint(1,cantidad)
15
Programación con código: Python
Volvamos a nuestro programa. Ahora que tenemos esa lista de aleatorios sólo tenemos que
generar la otra lista, la de nombres que hay que organizar aleatoriamente.
import random
cantidad = input("¿Cuántos nombres quieres introducir aleatoriamente en la
lista?: ")
cantidad = int(cantidad)
aleatorios = []
for numero in range(cantidad):
aleatorio = random.randint(1,cantidad)
16
Escribir y leer un archivo de texto
Intenta entender el código anterior y pruébalo hasta que tengas claro cómo está funcionando.
Si observas la captura puedes ver que tenemos dos listas, una con números y otra con
nombres. Ahora lo más sencillo sería vincular ambas listas de manera que el índice 0 de una
lista se asigne al índice 0 de la otra. Podemos hacer un diccionario en el cual la clave sea el
nombre y el valor sea el número:
import random
cantidad = input("¿Cuántos nombres quieres introducir aleatoriamente en la
lista?: ")
17
Programación con código: Python
cantidad = int(cantidad)
aleatorios = []
for numero in range(cantidad):
aleatorio = random.randint(1,cantidad)
while aleatorio in aleatorios:
aleatorio = random.randint(1,cantidad)
aleatorios.append(aleatorio)
nombres = []
for i in range(cantidad):
nombreNumero = str(i+1)
nombre = input("Nombre "+nombreNumero+": ")
nombres.append(nombre)
print(aleatorios)
print(nombres)
diccionario = {}
for i in range(len(aleatorios)):
diccionario[nombres[i]] = aleatorios[i]
print(diccionario)
Una vez más, prueba el código guardándolo como script y asegúrate de entender cómo
funciona. Es importante tener claro esto antes de pasar al siguiente punto. Dejo una vez más
una captura de su ejecución para 4 nombres:
18
Escribir y leer un archivo de texto
También podríamos haber unido las dos listas con el comando zip( ), ¿recuerdas?
Ahora si empieza a tener algo de sentido este script, ¿verdad? Guardamos un diccionario con
números aleatorios y lo tenemos para cuando queramos revisar qué número tenía asignado
cada nombre. Es cierto que también podríamos asignar valores aleatoriamente nosotros,
eligiendo números o metiendo papelitos con números en una bolsa y que cada persona saque
su papel, como se ha hecho toda la vida, pero este código tan sencillo nos da la virtud de hacer
este proceso más rápido y sin tener dudas de que será totalmente aleatorio.
Yo, por ejemplo, uso este tipo de scripts en clase para que mi alumnado no tenga nada que
objetar a la decisión y no perdamos tiempo. Obviamente tengo ya una lista de alumnos y
alumnas para cargar y no tener que escribirlas, más adelante aprenderás a hacer esto, pero
me sirve para agruparles aleatoriamente, para sentarles aleatoriamente, para darles tareas
aleatoriamente, y cualquier cosa que se me ocurra aplicando este principio.
19
Programación con código: Python
4. LEER UN ARCHIVO
Ya hemos aprendido a guardar en un archivo de texto, ahora nos falta aprender a incorporar a
un script la información guardada en un archivo de texto.
El proceso es sencillo, simplemente tenemos que indicar a Python que queremos abrir el
archivo en modo lectura (“r”) e indicar que queremos leerlo. Python automáticamente guardará
el contenido del archivo como un string, independientemente de lo largo que sea el documento.
Veamos cómo abrir el archivo creado anteriormente para guardar nombres:
archivo = open("nombres.txt","r")
contenido = archivo.read()
print (contenido)
archivo.close()
Guarda el anterior código como script y ejecútalo. Asegúrate de que exista el archivo
“nombres.txt” en la ruta donde guardes el script. Si no fuese así crea uno con una lista de
nombres (con un nombre en cada línea).
Si tratamos de abrir un archivo que no existe Python nos dará un error. Al guardar en archivo sí
crea uno en caso de no existir, pero esto no ocurre a la hora de abrir un archivo no existente:
20
Escribir y leer un archivo de texto
archivo = open("nombres.txt","r")
print(archivo.read())
archivo.close()
Cuidado al abrir archivos que contengan tildes o símbolos no anglosajones desde el IDLE,
puede ocurrir que se produzcan errores. En general, como indicamos en el primer tema, no es
buena práctica usar cualquier tipo de caracteres que no sean anglosajones (tildes,
interrogaciones y admiraciones iniciales, etc), aunque Python es perfectamente capaz como
lenguaje de trabajar con strings con esos caracteres, pero algunos intérpretes de Python (como
la ya mencionada IDLE) pueden dar errores.
21
Programación con código: Python
Otra forma de abrir un archivo es leerlo línea a línea, el código sería el siguiente:
archivo = open("nombres.txt","r")
print(linea)
archivo.close()
Prueba el código para que veas cómo hace lo mismo que el anterior, si bien el espacio entre
las líneas al imprimirlas es doble.
22
Escribir y leer un archivo de texto
Podemos utilizar el código anterior para ir almacenando el contenido de cada línea en una lista:
archivo = open("nombres.txt","r")
nombres = []
nombres.append(linea)
archivo.close()
print(nombres)
Parece que el anterior código debería funcionar sin problemas. Pruébalo como script antes de
seguir.
23
Programación con código: Python
… al final de cada línea del archivo de texto hay un salto de carro y como Python es muy
obediente lo ha incluido como parte de cada nombre con lo cual la lista nombres tiene que ser
depurada. Recuerda que el pensamiento de una máquina es peculiar, y para Python Ana es un
nombre tan válido como Ana\n.
24
Escribir y leer un archivo de texto
archivo = open("nombres.txt","r")
nombres = []
linea = linea.replace("\n","")
nombres.append(linea)
archivo.close()
print(nombres)
La función replace nos permite, en un string, sustituir unos caracteres por otros. En nuestro
programa estamos sustituyendo el salto de carro por nada (poner dos dobles comillas indica
que quieres poner lo que contienen las dobles comillas en un string, y como no contienen nada,
no pondremos nada).
A diferencia de remove en listas, replace sí que reemplaza todos los caracteres iguales, no sólo
el primero de ellos.
Prueba el código anterior, si no lo entiendes bien pruébalo incluyendo algún carácter entre las
segundas dobles comillas, por ejemplo un signo de admiración:
archivo = open("nombres.txt","r")
nombres = []
25
Programación con código: Python
linea = linea.replace("\n","!")
nombres.append(linea)
archivo.close()
print(nombres)
Si vemos la ejecución del programa anterior nos daremos cuenta que ha sustituido el salto de
carro por una admiración:
Perfecto, ya hemos conseguido leer un archivo donde los datos están escritos linea a linea e
incorporarlo al string en forma de lista.
¿Qué ocurre si hemos guardado una lista como tal directamente en el archivo? Si recordáis, al
principio del tema veíamos este caso:
Si incorporamos esa lista al programa tendremos que ver cómo sustituimos más cosas, no sólo
el salto de carro. Vamos a crear el archivo de texto que contenga esa información y vemos
cómo podemos ir trabajando ese string para convertirlo en una lista.
26
Escribir y leer un archivo de texto
Crea un archivo nombres.txt (puedes modificar el contenido del anterior archivo) con una lista
de tres nombres como la de arriba y ábrela con el script creado anteriormente antes de seguir.
No pongas tilde en María en caso de estar usando la IDLE.
Menudo follón. Tenemos una lista que contiene un único elemento lleno de comas, comillas,
etc. Además, las comillas se han convertido en comillas iniciales y finales… Depurar esto nos
va a llevar un rato.
archivo = open("nombres.txt","r")
nombres = []
linea = linea.replace("\n","")
linea = linea.replace("[","")
linea = linea.replace("]","")
linea = linea.replace("“","")
linea = linea.replace("”","")
nombres.append(linea)
archivo.close()
print(nombres)
27
Programación con código: Python
Puede parecer confuso porque este editor de texto no permite diferenciar muy claramente las
comillas de código de las de texto, a ver si poniendo captura de un editor de código lo tenéis
más claro:
Prueba a guardar el código como un script y ejecutarlo para ver qué ocurre. Cuidado con las
comillas, es complicado poner unas comillas que no sean rectas en un editor de código, lo más
fácil a veces es copiarlas de algún sitio y pegarlas porque el editor, al escribirlas con el teclado,
las pone como comillas rectas.
28
Escribir y leer un archivo de texto
Parece que ya tenemos una lista al uso, pero hay que tener cuidado porque las apariencias
engañan. Si te fijas, los nombres están todos englobados bajo unas únicas comillas simples,
esto quiere decir que todo ello es un único elemento de la lista. Las listas guardan cada
elemento (en caso de ser un string) englobado en comillas, nuestra lista debería tener un
aspecto similar a este (una comilla recta es lo mismo a efectos código en Python que dos
comillas rectas):
["Alfredo","Maria","Juan"]
29
Programación con código: Python
Vamos a usar un último elemento que parte los strings por un carácter concreto que tendremos
que indicar, convirtiéndolos en listas con tantos elementos como los que queden al partir el
string:
archivo = open("nombres.txt","r")
nombres = []
linea = linea.replace("\n","")
linea = linea.replace("[","")
linea = linea.replace("]","")
linea = linea.replace(""","")
linea = linea.replace(""","")
linea = linea.split(",")
nombres.append(linea)
archivo.close()
print(nombres)
30
Escribir y leer un archivo de texto
El comando .split parte un string por el carácter indicado, eliminándolo. Si indicamos a Python
que parta por las comas, Python crea una lista de tantos elementos como comas haya más
uno, ya que la primera coma que sustituimos nos dará una lista de 2 elementos y
posteriormente cada nueva coma añade un nuevo elemento.
Ojo, el comando split convierte un string en una lista, por lo que sólo podremos usarlo con un
carácter, si queremos partir después también por otro carácter tendremos que tener en cuenta
que ya tenemos una lista, y no un string muy largo, por lo que habrá que partir cada elemento
de la recién adquirida lista. Más adelante nos encontraremos este problema y lo entenderás
perfectamente.
Por lo tanto pasamos a tener una lista dentro de nuestra lista. Para evitar este efecto sólo
tendríamos que ir recorriendo la lista generada e introduciendo sus elementos en nuestra lista
nombres uno a uno, y no toda la lista línea de golpe:
archivo = open("nombres.txt","r")
nombres = []
linea = linea.replace("\n","")
linea = linea.replace("[","")
linea = linea.replace("]","")
linea = linea.replace("”","")
linea = linea.replace("“","")
linea = linea.split(",")
nombres.append(elemento)
archivo.close()
print(nombres)
31
Programación con código: Python
¡Hecho! guárdalo en un script y ejecútalo intentando entender todo lo que ha ocurrido antes de
continuar.
Aquí tienes una captura de cómo nuestro archivo ha sido, por fin, incorporado como lista a un
script de Python:
El comando split siempre va a partir el string en dos, creando dos elementos, uno a la izquierda
y otro a la derecha del carácter por el que partamos. Si el carácter para partir el string aparece
en la primera o en la última posición del mismo, la lista creada tendrá elementos vacíos, pues
antes o después del carácter por el que partimos el string no había nada. Veamos un ejemplo
de lo descrito para que quede claro. Si quiero partir el string @Maria@Juan@ utilizando como
carácter la @, la lista resultante tendrá cuatro elementos, el primero y el último serán
elementos vacíos, observa el código para entenderlo:
Como ves, la lista nombres tiene cuatro elementos, dos de los cuales (el primero y el último)
están vacíos por no existir nada antes de la primera @ ni después de la última.
32
Escribir y leer un archivo de texto
7. ALMACENANDO VARIABLES
Lo que hemos guardado ahora han sido elementos sueltos para ser incorporados a un script,
todos ellos dentro de una misma lista. En ocasiones lo que querremos almacenar serán
variables y su contenido para posteriormente volver a incorporarlas a un script. Vamos a ver
cómo podríamos hacerlo para que posteriormente sea fácil incorporarlas.
Una buena táctica sería utilizar un carácter especial para guardar las variables en un archivo,
de forma que grabemos la variable en el archivo con esos caracteres delimitándolas, por
ejemplo podemos usar una @.
gasto_abril = 18234
gasto_mayo = 209123
gasto_junio = 87690
archivo = open("cuentas.txt","w")
archivo.write("gasto_abril = "+str(gasto_abril))
archivo.write("@gasto_mayo = "+str(gasto_mayo))
archivo.write("@gasto_junio = "+str(gasto_junio))
archivo.close()
Como ves, estamos convirtiendo los números en string para almacenarlos y estamos
delimitando por @ las variables y su contenido. Sólo necesito una @ al comienzo de cada
variable porque partiremos el string por las @ con un split y no necesitamos la primera @
porque no necesitamos partir el elemento nada más empezar.
33
Programación con código: Python
Ahora toca crear el script para incorporarlas. Es una muy buena práctica pensar en cómo
vamos a hacer el script e incluso hacer un pequeño diagrama o esquema. En esta ocasión
vamos a partir el texto por las @ y por los =, eliminando previamente todos los espacios. Luego
será sencillo incorporarlo a un programa. Como mencionamos anteriormente, vamos a partir el
string por dos caracteres diferentes, así que habrá que hacerlo dos veces. Vamos paso a paso,
veamos el código para incorporar el programa y partir primero los elementos por la @.
archivo = open("cuentas.txt","r")
cuentas = []
linea = linea.replace("\n","")
linea = linea.split("@")
cuentas.append(elemento)
archivo.close()
print(cuentas)
En el momento que hacemos el .split, la variable línea pasa a ser automáticamente una lista, y
añadimos cada elemento de esa lista a nuestra lista definitiva, cuentas. Recuerda que hemos
llamado linea a la variable porque estamos leyendo el archivo línea a línea, aunque en este
caso sólo tenemos una línea. Las líneas vienen delimitadas por saltos de carro, que en nuestro
caso tampoco existen.
34
Escribir y leer un archivo de texto
Como ves, tenemos una lista de 3 elementos. Cada uno de los elementos es un string que
incluye el nombre de nuestra variable, un = y el valor de la variable. El siguiente paso es
recorrer la lista e ir partiendo cada elemento por el =, de forma que tendremos una lista que
tendrá otra lista de dos elementos en cada índice. Observa el código a continuación:
archivo = open("cuentas.txt","r")
cuentas = []
linea = linea.replace("\n","")
linea = linea.split("@")
35
Programación con código: Python
cuentas.append(elemento)
archivo.close()
cuentas_def = []
elemento = elemento.split("=")
cuentas_def.append(elemento)
print(cuentas_def)
Tenemos que crear otra lista llamada cuentas_def (de cuentas definitivas) para ir introduciendo
en esa nueva lista el resultado de partir cada elemento de la lista anterior por el =. Aquí tienes
el resultado de ejecutar el código:
Como ves, tenemos una lista con 3 elementos y cada uno de esos elementos es una lista con
dos partes, en la primera parte está el nombre de nuestra variable y en la segunda está el
contenido de la variable. Ahora sólo queda introducir ese valor en las variables gasto_abril,
gasto_mayo y gasto_junio, aunque realmente ya podríamos acceder a ese valor desde la lista
cuentas_def. El proceso será recorrer cada elemento de la lista y comprobando si el índice 0
del elemento coincide con el nombre de una variable, si es así guardamos el valor.
36
Escribir y leer un archivo de texto
archivo = open("cuentas.txt","r")
cuentas = []
linea = linea.replace("\n","")
linea = linea.split("@")
cuentas.append(elemento)
archivo.close()
cuentas_def = []
elemento = elemento.split("=")
cuentas_def.append(elemento)
print(cuentas_def)
if elemento[0] == "gasto_abril":
gasto_abril = elemento[1]
gasto_mayo = elemento[1]
gasto_junio = elemento[1]
37
Programación con código: Python
Éste es uno de los múltiples caminos para conseguir rescatar el valor de unas variables de un
archivo. Hace falta seguir un plan y tener un orden para escribirlas y lo mismo para rescatarlas.
Como habrás podido comprobar el valor se rescata del archivo que creamos al principio del
tema:
Con esto terminamos el tema, intenta hacer los retos para asentar todo lo aprendido en el
mismo.
38
Escribir y leer un archivo de texto
archivo = open("nombre.txt","w")
archivo.write(contenido)
#Cerrar un archivo
archivo.close()
archivo = open("nombre.txt","a")
import random
variable = random.randint(a,b)
archivo = open("nombre.txt","r")
archivo.read()
string.replace("caracter_antiguo","caracter_nuevo")
string.split("caracter")
39
Programación con código: Python
9. RETO 1
Trata de crear un script que guarde una lista de nombres en un archivo ya existente que
contenga una lista, leyendo previamente la lista. Inicialmente tendremos que abrir el archivo
con cuidado de que, en caso de no existir, Python nos dará un error (prueba con un try -
except).
El script nos tendrá que dar la opción de utilizar los nombres existentes en la lista y seguir
incorporando nuevos o bien eliminarlos todos y empezar de cero.
40
Escribir y leer un archivo de texto
10. RETO 2
Crea un script que te permita ir almacenando en un archivo una lista de materiales necesarios
para una obra o reforma. Utiliza un diccionario para almacenar cada material o artículo que hay
que adquirir y la cantidad necesaria (tendrás que ir preguntando al usuario y generar dos listas,
una de materiales y otra de cantidades). El usuario debería poder elegir entre introducir un
nuevo material o terminar la lista. Una vez terminada la lista habrá que guardarla en un archivo
de texto en un formato legible (un material o artículo por línea, por ejemplo).
41