7.6 Archivos texto – Ejercicios resueltos con Python

Ejercicios resueltos de programación en Python par archivos de texto

3Eva_IIIT2003_T4 Informes notas de estudiantes

Solución propuesta: s3Eva_IIIT2003_T4 Informes notas de estudiantes

2Eva_IIT2015_T3 Playaton limpieza de playas

Solución propuesta: s2Eva_IIT2015_T3 Playaton limpieza de playas, pyT2_pdf, pyT3_pdf

2Eva_IIT2001_T4 Control de habitaciones en una clínica

Solución propuesta: s2Eva_IIT2001_T4 Control de habitaciones en una clínica

3Eva_IIT2008_T4 Derivar pacientes del Hospital IESS

Solución propuesta: s3Eva_IIT2008_T4 Derivar pacientes del Hospital IESS, m_pdf

2Eva_IT2003_T4 Registro de carros en archivo

Solución propuesta: s2Eva_IT2003_T4 Registro de carros en archivo

3Eva_IT2003_T3 Reportar notas desde un archivo

Solución propuesta: s3Eva_IT2003_T3 Reportar notas desde un archivo

2Eva_IIT2003_T4 Contar palabras en un archivo

2Eva_IIT2015_T2 funcion totalportipo(tabla)

7.5 Archivos texto y diccionarios en Python

Para abrir y guardar un archivo se dispone de un ejemplo de una tabla de voluntarios.txt. La actividad es continuación del ejercicio «Playatón, limpieza de Playas«.

Abrir un archivo

Para el manejo de un archivo es necesario ‘abrir’ el proceso con la instrucción open() que requiere un nombre de archivo y el parámetro de lectura 'r' (read).

El archivo de ejemplo voluntarios.txt para la lectura se debe encontrar en el mismo directorio del script de Python. Si se ubica el archivo en otro directorio se añade la ruta al nombre del archivo.

1234,Juan,921,5.4
9874,Ana,138,6.2
2345,Pedro,432,6.2

La lectura de datos para la lista de ejemplo es línea por línea hasta encontrar una línea vacía ('') al final del archivo.

En el ejemplo, se separan los datos con la instrucción split(), se los ingresa en un registro para un diccionario que se adjunta la lista de voluntarios.

Al final es necesario cerrar el archivo mediante archivo.close()

print(' --- Abrir archivo de voluntarios---')
voluntarios=[]   # lista para datos

# prepara el modo lectura(read 'r') de archivo
archivo=open('voluntarios.txt','r')
linea=archivo.readline() #lee primera linea del archivo

while (linea!=''):  #Hasta encontrar final de archivo
    datos=linea.split(',')  # datos separados por comas
    ced=int(datos[0])
    nom=datos[1]
    pla=int(datos[2])
    rec=float(datos[3])

    # crea el registro como diccionario para la lista
    registro={'cedula':ced,
          'nombre': nom,
          'playa':pla,
          'recolectado':rec}
    voluntarios.append(registro)

    # Lee la siguiente linea
    linea=archivo.readline()

archivo.close()         # Cierra el archivo    
n=len(voluntarios)
print(' Se recuperaron '+ str(n) + ' registros')

Guardar un archivo

para almacenar un archivo es necesario ‘abrir’ el proceso con la instrucción open() que requiere un nombre de archivo y el parámetro de lectura 'w' de «write».

Se escriben los datos en una línea de texto. Al usar los registros de una lista, se los concatena separador por comas ',' antes de escribir la línea en el archivo.

Al final es necesario cerrar el archivo mediante archivo.close()

print('---- guardar el archivo de voluntarios ---')

# prepara el modo escritura(write 'w') de archivo
archivo=open('voluntarios.txt','w')

n=len(voluntarios)
fila=0
while not(fila>=n):

    # Crea linea de texto con datos para un registro, 
    # separada por comas
    cadena = voluntarios[fila]['cedula'])+','
    cadena = cadena + voluntarios[fila]['nombre'] +','
    cadena = cadena + str(voluntarios[fila]['playa']) +','
    cadena = cadena +str(voluntarios[fila]['recolectado']
    registro= str(cadena) +'\n'

    # Escribe en el archivo
    archivo.write(registro)
    fila = fila + 1

archivo.close()     # Cierra el archivo    
print('archivo guardado...')

Ejercicio 05

A partir del archivo adjunto: ‘voluntarios2.txt‘ , realizar cada ítem sin cargar todos los registros en memoria, procesar registro por registro.

  1. Calcule cuántos voluntarios se registraron en cada playa
  2. Determine el total de residuos recolectados en cada playa
  3. Muestre el total de playas atendidas y el total recolectado en el evento.
1234,Juan,921,5.4
9874,Ana,138,6.2
2345,Pedro,432,6.2
4464,Carmen,921,7.746045618
1654,Rosa,138,8.801108179
5892,Carlos,432,11.63081858
746,Juan,921,9.026632449
1630,Roberto,138,6.330733618
5374,Barbara,432,8.973105901
7045,Delia,921,2.691247379
4896,Elena,138,5.753989473
2276,karen,432,3.541916166
3862,Byron,921,9.215178996
1228,Daniel,138,11.10185605
5776,Fernando,432,3.743467333
6859,Gerardo,921,11.32735615
4048,Luis,138,8.775777268
7329,Mario,432,3.663067739
6513,Mercedes,921,7.189236877
3574,Patricio,138,8.390980584
9346,Paola,432,7.640959705
9180,Sara,921,9.341800838
5923,Tania,138,10.24375357
1254,Valeria,432,8.184033273
181,Washington,921,11.54233745
9558,Xavier,138,8.369232005
5019,Zoila,432,10.74144661
5036,Carlos,921,7.511491918
385,Juan,138,8.065057021
1256,Roberto,432,4.228084882
245,Barbara,138,5.102971916
234,Delia,432,3.830932219
6564,Elena,921,9.838714135
8767,karen,138,6.038399291
435,Byron,432,2.365789617

7.4 Archivos texto – con números

Los archivos tipo texto guardan los datos como cadenas de caracteres, por lo que en el caso de tener datos que sean de tipo entero o real, es necesario convertirlos a cadenas str() antes de concatenarlos a otros datos de un mismo registro en una línea.

En el caso de leer los datos desde un archivo tipo texto, será necesario la conversión al tipo de dato que se quiera usar, sea entero int() o real float().

Ejemplo: calificaciones de lecciones y promedio

El registro de calificaciones de un estudiante se guarda en un archivo tipo texto. Observe las conversiones a cadenas str() que se realizan para almacenar los datos antes de guardarlos en el archivo.

nombrearchivo = "calificaleccion.txt"
estudiante = 'Juan Pueblo'
leccion1 = 6
leccion2 = 9
promedio = (leccion1 + leccion2)/2

# Archivo en modo escritura 'write'
archivo = open(nombrearchivo,'w')
unregistro = estudiante + ',' + str(leccion1) +','+ str(leccion2)+','+ str(promedio) +'\n'
archivo.write(unregistro)
# Cierra el archivo
archivo.close()  

tutortexto03.png

La lectura de datos requiere una operación semejante a la usada para crear el archivo

nombrearchivo = "calificaleccion.txt"

# Archivo en modo escritura 'read'
archivo = open(nombrearchivo,'r')

unregistro = archivo.readline()
unregistro = unregistro.strip('\n')
datos = unregistro.split(',')

estudiante = datos[0]
leccion1   = int(datos[1])
leccion2   = int(datos[2])
promedio   = float(datos[3])

archivo.close()  # Cierra el archivo

# SALIDA
print('cadena: ', unregistro)
print('Datos en forma original: ')
print(estudiante)
print(leccion1)
print(leccion2)
print(promedio)
cadena:  Juan Pueblo,6,9,7.5
Datos en forma original: 
Juan Pueblo
6
9
7.5

Ejercicios

Realice las instrucciones necesarias para guardar en el archivo al menos tres registros de calificaciones.


Conceptos previos requeridos:

  • cadenas de caracteres
  • salto de línea ‘\n’
  • listas
  • número a caracter, caracteres a número

7.3 Archivos texto – Abrir y añadir registro

Ejemplo 3: Abrir archivo y añadir un contacto

Si el archivo está creado y solo es necesario añadir un contacto, es decir un registro, se utiliza la instrucción abrir usando el modo añadir o 'a' (append).

Por ejemplo, para añadir un contacto al archivo 'miscontactos.txt' creado en el Ejemplo 1, las instrucciones son:

nombre = 'Jefferson'
apellido = 'Perez'
telefono = '0987654345'
nombrearchivo = 'miscontactos.txt'

# Archivo en modo escritura 'append'
archivo = open(nombrearchivo,'a')
unregistro = nombre + ',' + apellido +','+telefono +'\n'
archivo.write(unregistro)
archivo.close()  # Cierra el archivo

El resultado se podrá observar abriendo el archivo:


Ejercicio 3

Al archivo ‘miscontactos.txt' añada dos registros y muestre su resultado.

 

7.2 Archivos texto – Abrir. Ejemplo

Ejemplo 2: Abrir archivo, Agenda telefónica

Para recuperar desde un archivo los datos de los contactos, se procede de forma inversa a la escritura del archivo, recuperando un registro, quitando el salto de línea '\n' y separando los datos por ','

Ejecute las siguientes instrucciones usando el archivo 'miscontactos3.txt' del ejercicio anterior y almacenado en el directorio de trabajo, observe los resultados.

nombrearchivo = 'miscontactos.txt'

# Archivo en modo lectura 'read'
archivo = open(nombrearchivo,'r')

unregistro = archivo.readline()
unregistro = unregistro.strip('\n')
datos = unregistro.split(',')

# Cierra el archivo
archivo.close()

print('unregistro: ', unregistro)
print(datos[0])
print(datos[1])
print(datos[2])
unregistro:  Juan,Leon,0987654321
Juan
Leon
0987654321

Para recuperar varios registros de contactos, es necesario realizar la lectura de varias líneas, registro a registro, hasta llegar al último y encontrar una línea vacío ».

Observe que para éste ejemplo el archivo de prueba es 'miscontactos3.txt', descargue el archivo en el caso que exista un error al desarrollar el ejercicio anterior.

datos=[]
nombrearchivo = 'miscontactos3.txt'

# Archivo en modo lectura 'read'
archivo=open(nombrearchivo,'r')
unregistro = archivo.readline()
while not(unregistro==''):
    unregistro = unregistro.strip('\n')
    datos.append(unregistro.split(','))
    unregistro = archivo.readline()
# Cierra el archivo
archivo.close()

print('datos: ')
print(datos)
datos:  
[['Juan', 'Montalvo', '0987654321'], ['Manuela', 'Saenz', '0987654322'], ['Julio', 'Jaramillo', '0987654323']]

Ejercicio 2

Al archivo de contactos añada un correo electrónico para cada contacto y guarde el resultado en el archivo: 'miscontactos4.txt'

 

7.1 Archivos texto – Guardar. Ejemplo

«Archivos de texto» es una forma básica de almacenar información, permite transferir o compartir los datos de una forma estándar para ser usada (importada) por una gran cantidad de programas editores de texto, hojas electrónicas, procesamiento de datos, etc.

Se presentan ejemplos, ejercicios y resumen en cada sección procesar datos desde o hacia un archivo de texto.

Agenda de contactos telefónicos

Para disponer de una agenda de contactos telefónicos y no perder los datos cuando se cierra Python o se apaga el computador, se almacena los datos en un archivo.

Ejemplo 1: Guardar archivo

Los datos básicos de un contacto telefónico se describen como un registro.

registro: un nombre, un apellido y un número telefónico.

Ejecuta las siguientes instrucciones y observa el resultado en el archivo con nombre ‘miscontactos.txt’ en el directorio de trabajo

nombre = 'Juan'
apellido = 'Leon'
telefono = '0987654321'
nombrearchivo = 'miscontactos.txt'

# Archivo en modo escritura 'write'
archivo = open(nombrearchivo,'w')
unregistro = nombre + ',' + apellido +','+telefono +'\n'
archivo.write(unregistro)
archivo.close()  # Cierra el archivo

print('se ha guardado:',nombrearchivo)

Para usar un archivo, se «abre» usando la instrucción open() , luego de escribir los datos se debe «cerrar» close() y no se realizan mas instrucciones sobre el archivo. El tipo de uso del archivo se indica mediante una letra ‘w’ (inicial de write) para escritura.

Los datos de un contacto se escriben separados por ‘,’ en una sola línea, para ésto se crea la cadena «unregistro» y se la envía al archivo mediante la instrucción archivo.write().


Ejercicio 1

Como una persona tiene más de un contacto telefónico, el ejercicio consiste en guardar al menos tres en el archivo «miscontactos3.txt«.
Al ejecutar las instrucciones, al final comprueba que los datos se encuentren registrados abriendo el archivo.

Nota: Para separar cada registro por cada línea, se crea una cadena de caracteres finalizada con un salto de línea ‘\n’

 

6.1.1 Diccionarios – Ejemplos

[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

Ejercicios resueltos con diccionarios en Python

2Eva_IT2015_T1 kutipak() quichua-español

Solución propuesta: s2Eva_IT2015_T1 kutipak() quichua-español

2Eva_IT2006_T1 Donaciones defensa civil

Solución Propuesta: s2Eva_IT2006_T1 Donaciones defensa civil

2Eva_IT2005_T4 Registrar mejores calificaciones

Solución Propuesta: s2Eva_IT2005_T4 Registrar mejores calificaciones

3Eva_IT2009_T3 Aspirantes a escuela de policia

Solución Propuesta: s3Eva_IT2009_T3 Aspirantes a escuela de policia

2Eva_IT2010_T3 Registrar donantes ONTOT

Solución propuesta: s2Eva_IT2010_T3 Registrar donantes ONTOT


[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

6.1 Diccionarios en Python

[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

Referencia: Rodríguez 7.7 p317, Van Rossum p33.

Los diccionarios son colecciones de datos con un formato que permite definir y acceder a sus componentes únicamente mediante una "clave". Cada componente de un diccionario es un par "clave:valor". El diccionario se define con corchetes "{}" y sus parejas de datos se separan con dos puntos «:».

Las claves deben ser únicas dentro del mismo diccionario.

Por ejemplo, para un diccionario entre quichua-español, se emparejan palabras entre los idiomas de la forma:

diccionario = {'man':'al',
               'wasi':'casa',
               'pak':'del',
               'kuska':'lugar',
               'pash':'y',
               'iyayku':'tecnología',
               'mañay':'servicio',
               'mamallakta':'país',
               'kutipak ':'traductor'}

para acceder al valor de una entrada o clave se usa formato de diccionario[entrada], y para consultar las entradas o claves se usa diccionarios.keys()

>>> diccionario['wasi']
'casa'
>>> diccionario.keys()
dict_keys(['man', 'wasi', 'pak', 'kuska', 'pash', 'iyayku',
 'mañay', 'mamallakta', 'kutipak '])
>>> 

Los valores se pueden pedir con diccionario.values() y la cantidad de entradas se encuentra con len().

>>> diccionario.values()
dict_values(['al', 'casa', 'del', 'lugar', 'y',
 'tecnología', 'servicio', 'país', 'traductor'])
>>> len(diccionario)
9
>>> 

Agregar elementos al diccionario una vez creado sigue un formato ya familiar de usar. Para el ejemplo se inicializa un diccionario vacio:

>>> diccionario ={}
>>> diccionario['wasi']='casa'
>>> diccionario
{'wasi': 'casa'}
>>> diccionario.update([['lugar','pash']])
>>> diccionario
{'wasi': 'casa', 'lugar': 'pash'}
>>> 

Los valores del diccionario asignados a la clave pueden ser datos simples o datos estructurados de tipo lista, tupla, conjunto o diccionario.

[ Diccionario ] [ Ejemplos ] [ Ejercicios ]

 

5.4 Funciones – librerías en Python

Algunas librerías vienen en la instalación básica de Python, como por ejemplo:

Revisar en el enlace: https://docs.python.org/2/library/math.html

La librería math contiene funciones matemáticas, para usarla se la llama al inicio (import):

import math

para luego usarla como en los ejemplos .

math.sqrt(4)
math.sin(0.4)
math.cos(0.3)
math.tan(0.45)

Aleatorios se pueden obtener al importar la librería random

import random as rnd

ejemplo de un dado se obtiene como:

dado=int(rnd.random()*6)+1

Otras librerías se desarrollan por diferentes comunidades y se deben incorporar a la instalación. Revisar sección Descargas

Librerías para Arreglos: Matrices, Vectores pip install numpy

Numpy es una librería de funciones para manejo de matrices y vectores en matemáticas y álgebra.

http://www.numpy.org/

import numpy as np
np.zeros(n, dtype=int)
np.zeros(shape=(n,n), dtype=int)
np.arange(2, 10, dtype=np.float)
np.linspace(1., 4., 6)
np.sin()
np.cos()
np.random.random()

Librerías para Gráficas

de funciones en los planos cartesianos, ver sección para graficas usan las librerías matplotlib: https://matplotlib.org/

import matplotlib.pyplot as plt

Existen algunas versiones empaquetadas de Python que permiten disponer de las librerías científicas preinstaladas. El proceso de instalación es simplificado y se encuentra en la sección WinPython (portable)

Ejemplos de cómo usar las librerías gráficas se dan en la Unidad 8 Gráficas básicas de funciones