Cómo leer y analizar un archivo CSV en Python

Aprenda a leer y analizar archivos CSV en Python utilizando el módulo csv integrado. Domine la lectura como listas, lectores de diccionarios y delimitadores personalizados.

Pruebe esta solución en el Editor

Descripción general

CSV (valores separados por comas) es un formato de archivo omnipresente para almacenar conjuntos de datos tabulares. Ya sea importando bases de datos, exportando hojas de cálculo o descargando registros, la lectura de CSV es una habilidad fundamental. Python incluye un módulo `csv` dedicado y altamente optimizado para analizar archivos CSV fácilmente sin necesidad de bibliotecas de terceros como pandas.

La función `csv.reader` lee un archivo línea por línea y lo analiza, dividiendo cada fila por el delimitador de coma y devolviendo listas de cadenas. Si su archivo CSV tiene una fila de encabezado (por ejemplo, etiquetas de columna), a menudo se prefiere usar `csv.DictReader`. Analiza automáticamente cada fila en un diccionario donde las claves son las etiquetas de las columnas, lo que hace que el código sea mucho más legible y resistente a los cambios en el orden de las columnas.

Al abrir archivos CSV, se recomienda establecer `newline=""` en la declaración `open()`. Esto evita que Python realice traducciones automáticas de nuevas líneas, lo que puede provocar errores de análisis en ciertos sistemas operativos. Además, especifique siempre `encoding="utf-8"` para manejar caracteres especiales.

Código y salida de ejecución

Este script demuestra cómo escribir un archivo CSV de muestra y leerlo usando csv.reader y csv.DictReader.

import csv

# Writing a sample CSV file
sample_content = [
    ["name", "role", "salary"],
    ["Alice", "Developer", "90000"],
    ["Bob", "Manager", "110000"]
]
with open("employees.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sample_content)

# 1. Reading CSV using csv.reader (List representation)
print("--- Using csv.reader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    reader = csv.reader(file)
    header = next(reader) # Skip header row
    print("Header:", header)
    for row in reader:
         print(f"Employee: {row[0]} | Role: {row[1]}")

# 2. Reading CSV using csv.DictReader (Dictionary representation)
print("\n--- Using csv.DictReader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
         print(f"Name: {row['name']} | Role: {row['role']} | Salary: {row['salary']}")
Salida terminal
--- Using csv.reader ---
Header: ['name', 'role', 'salary']
Employee: Alice | Role: Developer
Employee: Bob | Role: Manager

--- Using csv.DictReader ---
Name: Alice | Role: Developer | Salary: 90000
Name: Bob | Role: Manager | Salary: 110000

Implementación paso a paso

  • Importe el módulo csv integrado en su secuencia de comandos.
  • Abra el archivo CSV usando open("employees.csv", "r", newline="", encoding="utf-8") como archivo.
  • Pase el objeto de archivo a csv.reader(file) para analizar las filas del archivo como listas de cadenas.
  • Utilice csv.DictReader(file) para analizar filas como asignaciones de diccionario correspondientes a encabezados de columna.

Preguntas frecuentes

¿Por qué debería establecer newline="" al abrir un archivo CSV?

Configurar newline="" evita que Python modifique dinámicamente los caracteres de fin de línea, lo que garantiza que el módulo csv pueda analizar las nuevas líneas de estilo csv correctamente en diferentes sistemas operativos.

¿Cómo analizo un archivo CSV que usa tabulaciones o punto y coma en lugar de comas?

Puede pasar un delimitador personalizado a la función de lector: csv.reader(file, delimiter="\t") o csv.reader(file, delimiter=";").

Temas relacionados

Recursos recomendados de Python

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