Python CSV: lectura y escritura de hojas de cálculo

Aprenda a manejar datos CSV en Python. Domine csv.reader, csv.writer y DictReader/DictWriter para un análisis eficiente de tablas.

Pruébelo en el editor

Descripción general

CSV (valores separados por comas) es un formato omnipresente para exportar e importar datos desde hojas de cálculo y bases de datos relacionales. Dado que los archivos CSV son archivos de texto simples, cuentan con el respaldo universal de herramientas analíticas, plataformas de bases de datos y lenguajes de programación. Python presenta un módulo `csv` incorporado optimizado específicamente para analizar, escribir y manipular datos tabulares sin necesidad de bibliotecas de terceros como pandas.

El módulo csv proporciona dos interfaces principales: lectores/escritores basados en listas y lectores/escritores basados en diccionarios. `csv.reader()` y `csv.writer()` representan cada línea en el CSV como una lista de cadenas, lo cual es simple pero requiere hacer referencia a las columnas por su índice numérico. Para un enfoque más sólido, los desarrolladores utilizan `csv.DictReader()` y `csv.DictWriter()`. Estas clases asignan cada fila a un diccionario utilizando la fila del encabezado CSV como clave, lo que produce un código altamente legible que no se rompe si se reordenan las columnas.

Cuando se trata de archivos CSV, los detalles de sintaxis son importantes. Los diferentes programas utilizan distintos delimitadores (como tabulaciones o punto y coma) y manejan las comillas o los finales de línea de distintas maneras. El módulo `csv` le permite definir delimitadores personalizados, reglas de citación y caracteres de escape mediante un parámetro 'dialecto'. Además, al abrir archivos CSV en Python, es un requisito fundamental pasar `newline=''` a la función `open()` para evitar problemas de líneas en blanco en diferentes sistemas operativos.

Código y salida de ejecución

Escribir datos en un archivo CSV usando DictWriter y leerlos nuevamente con DictReader.

import csv

filename = "employees.csv"
fieldnames = ["id", "name", "department"]
data = [
    {"id": "101", "name": "Bob", "department": "HR"},
    {"id": "102", "name": "Alice", "department": "Engineering"}
]

# Write dict data to CSV
with open(filename, "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(data)

print("CSV written successfully.\n--- Reading CSV ---")

# Read CSV data back as dictionaries
with open(filename, "r", newline="") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(f"Employee {row['name']} works in {row['department']}.")
Salida terminal
CSV written successfully.
--- Reading CSV ---
Employee Bob works in HR.
Employee Alice works in Engineering.

Implementación paso a paso

  • Exportación de registros de hojas de cálculo para análisis financiero
  • Importación de catálogos de listas de contactos a bases de datos
  • Formatear resultados estadísticos de scripts computacionales

Preguntas frecuentes

¿Por qué necesito especificar newline="" al abrir un archivo CSV?

Esto lo requiere el escritor interno del módulo csv para evitar que se inserten líneas en blanco adicionales, particularmente en plataformas Windows.

¿Cómo puedo analizar un archivo CSV que usa tabulaciones en lugar de comas?

Puede pasar el parámetro delimitador al lector o escritor, por ejemplo, csv.reader(archivo, delimitador='\t').

Temas relacionados

Recursos recomendados de Python

Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.