Saltar al contenido principal

Ficheros CSV

Supongamos que tenemos un archivo CSV llamado datos.csv con el siguiente contenido:

nombre,edad,ciudad
Manuel,35,Santiago
Laura,34,Arzúa
Antía,22,A Coruña

Leer un archivo CSV

Podemos leer un archivo csv de la siguiente manera:

# Abrimos el archivo en modo lectura
with open('datos.csv', 'r') as archivo_csv:

# Leemos todas las líneas del archivo
# Esto devuelve una lista de str
lineas = archivo_csv.readlines()

# Iteramos sobre las líneas
for linea in lineas:
# Eliminamos los caracteres de nueva línea al final de esta
linea = linea.strip()

# Divide la línea en una lista de cadenas a partir del separador que se pasa como argumento
# En este caso el delimitador es la coma
lista_de_valores = linea.split(',')

# Imprimimos una fila del archivo como una lista de str
print(lista_de_valores)

Leer un archivo CSV obviando la cabecera

Podemos obviar la primera línea si esta contiene una línea que funciona como cabecera:

# Abrimos el archivo en modo lectura
with open('datos.csv', 'r') as archivo_csv:

# Leemos todas las líneas del archivo
# Esto devuelve una lista de str
lineas = archivo_csv.readlines()

# Saltamos la primera línea
lineas = lineas[1:]

# Iteramos sobre las líneas
for linea in lineas:
# Eliminamos los caracteres de nueva línea al final de esta
linea = linea.strip()

# Divide la línea en una lista de cadenas a partir del separador que se pasa como argumento
# En este caso el delimitador es la coma
lista_de_valores = linea.split(',')

# Imprimimos una fila del archivo como una lista de str
print(lista_de_valores)

Leer un archivo CSV con la librería csv

Podemos leer un archivo csv con la librería del mismo nombre:

# Importamos la librería
import csv

# Abrimos el archivo CSV en modo lectura
with open('datos.csv') as archivo_csv:
# Creamos un objeto lector de CSV
lector_csv = csv.reader(archivo_csv)

# Recorremos cada fila del archivo
for fila in lector_csv:
# Imprimimos cada fila que es una lista de str
print(fila)

Si en lugar del método reader() utilizamos DictReader() cada fila, en lugar de una lista de cadenas, será un diccionario, donde las claves son los nombres de las columnas.

# Importamos la librería
import csv

# Abrimos el archivo CSV en modo lectura
with open('datos.csv') as archivo_csv:
# Creamos un objeto lector de CSV
lector_csv = csv.DictReader(archivo_csv)

# Recorremos cada fila del archivo
for fila in lector_csv:
# Acceder a una columna específica de la fila por el nombre de la columna
print(fila['nombre'])

Escribir un archivo CSV

Escribimos en un archivo CSV como si fuera un archivo de texto:

# Datos a escribir en el archivo
datos = [
['nombre', 'edad', 'ciudad'],
['Manuel', 35, 'Santiago'],
['Laura', 34, 'Arzúa']
]

# Abrimos el archivo en modo escritura
with open('datos.csv', 'w') as archivo_csv:

# Escribimos las filas de datos incluida la cabecera
for fila in datos[1:]:
# Creamos una cadena de caracteres por cada fila con los datos correspondientes
fila_str = ""
for dato in fila:
fila_str += str(dato) + ","
# Eliminamos la última coma
fila_str = fila_str[:-1]

# Escribimos la fila en el archivo y agregamos una nueva línea
archivo_csv.write(fila_str + '\n')

Escribir un archivo CSV con la librería csv

El ejemplo anterior utilizando la librería csv se simplifica de manera significativa.

import csv

# Datos a escribir en el archivo
datos = [
['nombre', 'edad', 'ciudad'],
['Manuel', 35, 'Santiago'],
['Laura', 34, 'Arzúa']
]

# Abrimos el archivo en modo escritura
with open('datos.csv', 'w') as archivo_csv:

# Creamos un objeto escritor de CSV
escritor_csv = csv.writer(archivo_csv)

# Escribimos los datos en el archivo CSV
for fila in datos:
escritor_csv.writerow(fila)

También existe la clase DictWriter que se utiliza para escribir archivos CSV a partir de diccionarios.

import csv

# Datos en forma de lista de diccionarios
datos = [
{'nombre': 'Juan', 'edad': 25, 'ciudad': 'Madrid'},
{'nombre': 'María', 'edad': 30, 'ciudad': 'Barcelona'},
{'nombre': 'Pedro', 'edad': 35, 'ciudad': 'Valencia'}
]

# Nombres de las columnas del CSV
nombres_columnas = ['nombre', 'edad', 'ciudad']

# Abrimos el archivo
with open('datos.csv', 'w', newline='') as archivo_csv:
# Creamos el escritor DictWriter especificando el archivo CSV y los nombres de las columnas
escritor_csv = csv.DictWriter(archivo_csv, fieldnames=nombres_columnas)

# Escribimos la primera fila (cabecera)
escritor_csv.writeheader()

# Escribimos los datos desde un diccionario
for fila in datos:
escritor_csv.writerow(fila)