Hoy vamos a ver un ejemplo simple con Python y los archivos CSV. Veremos cómo convertir un CSV a un arreglo.
Primero vamos a convertir cada columna del archivo a un diccionario de Python, y después vamos a agregar ese diccionario a nuestra lista.
En el ejemplo te mostraré cómo leer datos enteros y flotantes, así como cadenas. De este modo tú podrás leer cualquier archivo separado por comas para tenerlo como array en Python.
Nota: yo decidí usar un diccionario, tú podrías usar una lista de listas o cualquier otra cosa.
Explicación del algoritmo
Vamos a abrir y leer el archivo línea por línea (omitiendo el encabezado si es necesario). En cada paso, tendremos una línea del CSV.
Ahora convertiremos esa línea a arreglo con split, y ya tendremos las columnas separadas. Luego transformamos cada valor a su tipo en caso de ser necesario, y lo asignamos al diccionario.
Cuando tenemos el diccionario, lo agregamos al arreglo con append. Y finalmente ya tendremos el CSV cargado a nuestro arreglo con Python.
El archivo CSV
Para este ejemplo tengo un archivo de alumnos en donde la primera línea es el encabezado y luego tenemos, en orden, el nombre, la edad, la altura y la matrícula.
Nombre,Edad,Altura,Matrícula
Luis,50,1.2,1
Pedro,22,1.3,2
Link,34,0.56,3
Juan,10,2,4
Zero,12,1.2,5
Steve,23,2.5,6
(dale a view raw al gist para que veas el archivo real).
El orden de las columnas importa, ya que los vamos a leer así más adelante.
CSV a lista de Python
Entonces abrimos el archivo. Definimos el separador y la lista donde vamos a tener los datos:
separador = ","
with open(nombre_archivo, encoding="utf-8") as archivo:
next(archivo) # Omitir encabezado del archivo
alumnos = []
Luego iteramos el archivo línea por línea, quitamos el salto de línea con rstrip, convertimos y asignamos. La definición del diccionario está junto con la llamada a append
en la línea 8.
for linea in archivo:
linea = linea.rstrip("\n") # Quitar salto de línea
columnas = linea.split(separador)
nombre = columnas[0]
edad = int(columnas[1])
altura = float(columnas[2])
matricula = columnas[3]
alumnos.append({
"nombre": nombre,
"edad": edad,
"altura": altura,
"matricula": matricula,
})
return alumnos
Fíjate en que estoy usando int
y float
para convertir las cadenas a números. Finalmente encerramos todo el comportamiento en una función:
# https://parzibyte.me/blog
def obtener_csv_como_lista_de_diccionarios(nombre_archivo):
separador = ","
with open(nombre_archivo, encoding="utf-8") as archivo:
next(archivo) # Omitir encabezado del archivo
alumnos = []
for linea in archivo:
linea = linea.rstrip("\n") # Quitar salto de línea
columnas = linea.split(separador)
nombre = columnas[0]
edad = int(columnas[1])
altura = float(columnas[2])
matricula = columnas[3]
alumnos.append({
"nombre": nombre,
"edad": edad,
"altura": altura,
"matricula": matricula,
})
return alumnos
Y ya podemos invocar a esta función desde cualquier lugar, pasándole el nombre del archivo.
Poniendo todo junto
Entonces con el siguiente CSV:
Nombre,Edad,Altura,Matrícula
Luis,50,1.2,1
Pedro,22,1.3,2
Link,34,0.56,3
Juan,10,2,4
Zero,12,1.2,5
Steve,23,2.5,6
Podemos usar el siguiente código para leer el archivo e imprimir cada dato por separado:
# https://parzibyte.me/blog
def obtener_csv_como_lista_de_diccionarios(nombre_archivo):
separador = ","
with open(nombre_archivo, encoding="utf-8") as archivo:
next(archivo) # Omitir encabezado del archivo
alumnos = []
for linea in archivo:
linea = linea.rstrip("\n") # Quitar salto de línea
columnas = linea.split(separador)
nombre = columnas[0]
edad = int(columnas[1])
altura = float(columnas[2])
matricula = columnas[3]
alumnos.append({
"nombre": nombre,
"edad": edad,
"altura": altura,
"matricula": matricula,
})
return alumnos
def main():
alumnos = obtener_csv_como_lista_de_diccionarios("alumnos.csv")
for alumno in alumnos:
nombre = alumno["nombre"]
edad = alumno["edad"]
altura = alumno["altura"]
matricula = alumno["matricula"]
print(
f"Tenemos a {nombre} con {edad} años, altura {altura} y matrícula {matricula}")
main()
La salida es correcta:
En este caso solo estoy imprimiendo los datos pero tú puedes hacer cualquier otro tipo de cosas con ellos.
Y con este ejemplo espero que quede claro cómo leer un CSV en Python para convertirlo a un arreglo.