Trabajando con Archivos

3. Archivos 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']