Trabajando con Archivos
Sitio: | Facultad de Ingeniería U.Na.M. |
Curso: | Informática ET241/EM241/IC241/IN241/IM204 |
Libro: | Trabajando con Archivos |
Imprimido por: | Invitado |
Día: | miércoles, 18 de diciembre de 2024, 04:55 |
1. Introducción.
Vamos a desarrollar en este libro a lo largo de los capítulos la manera de trabajar con Archivos en Python.
Se solicita al alumno crear con el editor de texto ( Notepad o Block de Notas en Windows o en Linux Mousepad o Gedit , etc)
Un editor de texto NO es el Word, o Write, Un editor de texto NO permite letras negritas, subrayadas, o de distintos tamaños. Solo texto plano.
Para las pruebas vamos a crear un archivo con el siguiente contenido:
Contenido del archivo:
1234567890
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
!"#$%&/()=?[] {}-:.,
Y lo guardamos con el Nombre del Archivo: prueba.txt , observar en que directorio o carpeta se guarda, es importante.
2. Accediendo a un archivo.
Vamos a crear un programa un Python que tenga los siguiente:
Figura 1
Este scritp USA el archivo que creamos anteriormente. Vemos que en la línea 3, se muestra que TIPO de datos es file.
Si miramos la salida de este script veremos:
Figura 2
- La línea 2 NO muestra el archivo.txt.
- La línea 3 muestra que el tipo file es : <class '_io.TextIOWrapper'>
3. Archivos CSV
¿Que es un archivo csv ?
Las siglas CSV vienen del inglés "Comma Separated Values" y significan valores separados por comas.
Dicho esto, un archivo CSV es cualquier archivo de texto en el cual los
caracteres están separados por comas.
Uno podría preguntarse por que separarlos por coma?, bueno pensemos en que tenemos un planilla de cálculo con columnas, por ejemplo:
Figura 1
Si guardamos esto que podría ser un archivo de Calc : .ods o de Excel: .xls o xlsx como texto debemos de alguna manera ver como indicamos la separación de cada columna, bueno la solución es separalos por columnas.
Si queremos guardalo como csv o exportarlo veremos algo como:
Figura 2
y lo que finalmente tiene el archivo:
Figura 3
Notemos que la primer línea se corresponde con los nombres que se le dieron a las columnas!!
Las columnas quedan definidas por comas , pero se puede elegir esto como se vé en la figura 2 punto y coma (;)
De esta manera exportando o guardando como .., se pueden crear archivos CSV con gran facilidad
Como este tipo de archivos .csv son obtenidos a partir de Tablas están
asociados directamente a la creación de tablas de contenido que son elementos frecuentes que analizan los Ingenieros.
Veamos como trabajar con ellos desde Python.
3.1. Mostrando un archivo
Veremos como trabajar con un archivo que fue descargado desde una planilla de cálculo.
El archivo evaluaciones.csv, se encuentra disponible en el link, por favor descargue el archivo. Este archivo se obtuvo exportando del Moodle las evaluaciones de los alumnos de algún año pasado y se eliminaron los nombres, dejando solo los apellidos para evitar la identificación unívoca y resguardar los datos personales.
En este ejercicio, cada línea del archivo evaluaciones.csv es un string.
El archivo abierto con un editor de texto se vería:
nombre,asistencia,parcial1,parcial2,parcial3,
Acuña,86.4%,10,2,0,
Alvez,86.4%,9.87,8,7.4,
Amarilla,90.5%,8.22,9,8,
Aquino,84.0%,7.66,2.5,2.5,
Arroyo,90.5%,9.33,2.5,8,
Ayala,95.2%,7.67,5,9.7,
Ayala,91.3%,8.11,6,9.5,
Bautista,95.7%,8.98,4,3,
Benitez,87.5%,7.67,7,6,
Benitez,81.8%,7.39,5,4.5,
Benitez,90.9%,7.56,2,1,
Bitancurt,100.0%,7.06,5,6,
Bohaczenko,95.0%,8.2,4,9,
Botello,83.3%,7.33,5,2,
Briamonte,95.8%,8.11,6,2.5,
etc.etc.
El siguiente script de Python mostraría por pantalla los datos del archivo.
Figura 1
La línea 10 abre el archivo, ver que el argumento indica o debería indicar el camino o path donde se encuentra el archivo, y si no hay error de excepción con el bucle for recorre cada línea del archivo. Las líneas serán tomadas como tipo de datos string, esto se puede ver haciendo un print(type(linea))
La salida de este script sería :
Figura 2
y sigue.
Al hacer el ejercicio, asegurase que el archivo evaluaciones.csv y el .py estén en el mismo directorio.!!!
3.2. Formateando los datos...
Recordemos que el archivo evaluaciones.csv tiene
- nombre
- porcentaje de asistencia
- nota de parcial 1
- nota de parcial 2
- nota de parcial 3
Vamos a transformar el archivo en una lista para que luego podamos procesar, esto no lo vamos a hacer en aquí, pero el alumno tiene los datos para poder hacer el análisis que quiera.
Figura 1
La salida de este script sería:
Figura 2
y sigue.
¿Que
pasaría si queremos ver el archivo en un formato mas lindo y saber por
ejemplo cuales fueron las notas que mas se repitieron?
Consigna: Agregar el promedio de las notas de cada alumno
En
este código, recorremos file, línea es una lista, con valores tomo las
notas que están en la posición 2,3,4 calculo el promedio, agrego un
valor a la lista y escribo allí el promedio.
La salida de este scritp sería:
Podemos ver que aparece el promedio como nuevo elemento de cada línea.
Hasta aquí esta todo bien...pero el tema sería como escribir esta lista como un archivo csv?.
Para eso vamos a utilizar una librería llamada panda y csv.
3.3. Usando csv
Vamos a usar la librería csv para escribir la lista que teníamos.
Recordemos que era una lista, donde cada lista era una línea. Lo primero que debemos hacer es importar la librería .csv
Luego a lo que ya teníamos ( del capítulo anterior ) agregamos el encabezado, eso sucede en línea 10.
Habíamos calculado el promedio de las notas, pero eso NO tenía encabezado, así que en la línea 15, creamos ese nuevo encabezado llamado : "Promedio"
En la línea 17 asociamos el flujo new_file al nuevo archivo evaluaciones_nuevo.csv en modo de escritura (mode='w' ) de write.
En la línea 18 creamos un objeto writer que usando un método de csv va a escribir en el nuevo archivo.
En la línea 19 escribimos los encabezados.
En la línea 21 y 22 recorremos cada lista de, sin tomar la de indice cero, que eran los headers y ya los incluimos. Cada lísta con indice 1... hasta la última, voy escribiendo en el archivo evaluaciones_nuevo.csv.
Si abro con una planilla de cálculo se vería:
Si bien faltarían algunas cosas, como el tema de los decimales, creo que es suficiente para entender como funciona.
Otro ejemplo con .csv
Veamos otro ejemplo, esto fue realizado por la Ing.Andrea Santanter
La idea de este punto es mostrar como leer datos desde un archivo .csv y copiarlo a una lista en python.
Si tenemos un archivo en calc con las notas de alumnos, lo guardamos como .csv, despues podemos importarlo desde python.
El archivo notas.csv esta disponible en el aula virtual
Si abre este archivo usando algún editor de texto, su contenido debería verse así.
Alumno,Nota 1,Nota 2,Nota 3
Juan,4,10,10
Pepe,10,10,3
Coco,10,9,5
Mary,2,3,4
Anibal,5,6,7
Jorge,4,5,6
Esteban,8,9,10
Monica,7,8,9
Ester,5,6,7
Python tiene un módulo incorporado llamado CSV, que tiene una clase de lectura para leer el contenido de un archivo CSV.
El código de ejemplo para leer el CSV a una lista en Python es el siguiente.
from csv import reader
with open('notas.csv', 'r') as csv_file:
csv_reader = reader(csv_file)
list_of_rows = list(csv_reader)
for i in range(len(list_of_rows)):
print(list_of_rows[i])
csv_reader = reader(csv_file)
pasa el archivo csv_file
a la función csv.reader()
y obtiene el objeto reader
.
Devuelve un iterador, que se utiliza para iterar sobre todas las líneas del archivo CSV.
list_of_rows = list(csv_reader)
convierte el objeto csv.reader
en una lista de listas, donde cada elemento de la lista significa una fila de CSV, y cada elemento de la lista representa una celda o columna de una fila.
Resultado:
['Alumno', 'Nota 1', 'Nota 2', 'Nota 3']
['Juan', '4', '10', '10']
['Pepe', '10', '10', '3']
['Coco', '10', '9', '5']
['Mary', '2', '3', '4']
['Anibal', '5', '6', '7']
['Jorge', '4', '5', '6']
['Esteban', '8', '9', '10']
['Monica', '7', '8', '9']
['Ester', '5', '6', '7']
3.4. Usando pandas
Primero de todo instalamos el módulo de pandas:
Figura 1
Es un paquete que te ayuda a trabajar con datos multidimensionales que son comunes en estadística o econometría. El nombre viene de PANel DAta Set.
Por otro lado, pandas es muy útil para manipular tablas de datos, esto con la estructura de datos que vamos a conocer como data frames.
Los dataframes tiene la particularidad de que diferentes tipos de variables pueden encajar en la misma tabla. Esto a diferencia de un array de que sólo admite un tipo de dato por conjunto de datos (suena a diccionarios o listas de Python)
Por último, pandas está construido sobre numpy lo que lo hace también súper rápido y eficiente.
Consigna
Se tiene un archivo llamado evaluaciones.csv y se quiere procesar para calcular el promedio de los parciales y finalmente mostrar una gráfico de torta con los aprobados ( >=6) y los No aprobados (<6).
Figura 2
Vamos a usa pd para asociar el archivo evaluaciones.csv al objeto df. Luego agregamos una columna mas, llamada promedio con el método .assign completamos todas las líneas de esa columa en cero ( Promedio =0).
Para mas información de panda (https://pandas.pydata.org/) y leer la documentación sobre los métodos. También podemos recurrir a w3schools , que tiene algún ejemplo ( https://www.w3schools.com/python/pandas/ ) .
La salida del script sería:
Vamos a calcular el promedio de las notas y guardarlo en la columna Promedio.