Módulo csv de Python

Los archivos CSV (Comma-Separated Values) son un formato de archivo común utilizado para almacenar datos tabulares.

Los archivos CSV consisten en texto plano; cada línea representa una fila de datos de la tabla, y cada columna se separa mediante comas (u otro separador).

Los archivos CSV se utilizan a menudo para el intercambio de datos, ya que son simples y fáciles de procesar.

Python proporciona uncsvmódulo, utilizado para leer y escribir archivos CSV. Este módulo simplifica el proceso de manejo de archivos CSV, permitiendo a los desarrolladores manipular datos tabulares fácilmente.


1. Leer archivos CSV

Para leer archivos CSV, se puede usarcsv.readerel objeto. A continuación se muestra un ejemplo simple:

Ejemplo

import csv

# Abrir archivo CSV
with open('data.csv', mode='r', encoding='utf-8') as file:
    # Crear el objeto csv.reader
    csv_reader = csv.reader(file)
   
    # Leer datos línea por línea
    for row in csv_reader:
        print(row)

Explicación del código:

  • open('data.csv', mode='r', encoding='utf-8'): abre en modo de solo lecturadata.csvel archivo, y especifica la codificación como UTF-8.
  • csv.reader(file): crear uncsv.readerobjeto, utilizado para leer el contenido del archivo.
  • for row in csv_reader: lee el contenido del archivo línea por línea; cada línea de datos se analiza como una lista.

2. Escribir archivos CSV

Para escribir archivos CSV, se puede usarcsv.writerel objeto. A continuación se muestra un ejemplo:

Ejemplo

import csv

# Datos a escribir
data = [
    ['Name', 'Age', 'City'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles']
]

# Abrir archivo CSV
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    # Crear el objeto csv.writer
    csv_writer = csv.writer(file)
   
    # Escribir datos
    for row in data:
        csv_writer.writerow(row)

Explicación del código:

  • open('output.csv', mode='w', encoding='utf-8', newline=''): abre en modo de escrituraoutput.csvel archivo, y especifica la codificación como UTF-8.newline=''Se usa para evitar líneas en blanco en sistemas Windows.
  • csv.writer(file): crear uncsv.writerobjeto, utilizado para escribir el contenido del archivo.
  • csv_writer.writerow(row): escribe cada línea de datos en el archivo.

3. Leer y escribir archivos CSV con diccionarios

csvEl módulo también proporcionaDictReaderyDictWriterclases, que pueden analizar cada línea del archivo CSV como un diccionario, o escribir un diccionario en un archivo CSV.

ParaDictReaderleer archivos CSV:

Ejemplo

import csv

with open('data.csv', mode='r', encoding='utf-8') as file:
    csv_dict_reader = csv.DictReader(file)
   
    for row in csv_dict_reader:
        print(row)

ParaDictWriterescribir archivos CSV:

Ejemplo

import csv

data = [
    {'Name': 'Alice', 'Age': '30', 'City': 'New York'},
    {'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]

with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['Name', 'Age', 'City']
    csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
   
    # Escribir el encabezado
    csv_dict_writer.writeheader()
   
    # Escribir datos
    for row in data:
        csv_dict_writer.writerow(row)

Propiedades y métodos comunes

Métodos principales del módulo csv

MétodoDescripciónEjemplo
csv.reader()Leer datos CSV de un objeto de archivoreader = csv.reader(file)
csv.writer()Escribir datos en un archivo CSVwriter = csv.writer(file)
csv.DictReader()Leer filas CSV como diccionarios (con encabezado)dict_reader = csv.DictReader(file)
csv.DictWriter()Escribir diccionarios en un archivo CSV (requiere especificar nombres de campo)dict_writer = csv.DictWriter(file, fieldnames)
csv.register_dialect()Registrar un formato CSV personalizado (como el separador)csv.register_dialect('mydialect', delimiter='|')
csv.unregister_dialect()Eliminar un dialecto registradocsv.unregister_dialect('mydialect')
csv.list_dialects()Listar todos los dialectos registradosprint(csv.list_dialects())

Métodos comunes de los objetos csv.reader y csv.writer

MétodoDescripciónObjeto aplicable
__next__()Iterar para leer la siguiente fila (o usarforun bucle)reader
writerow(row)Escribir una sola fila de datoswriter
writerows(rows)Escribir múltiples filas de datos (lista de listas)writer

Características de los objetos csv.DictReader y csv.DictWriter

Característica/MétodoDescripciónEjemplo
fieldnamesLista de nombres de campo (DictReaderobtenida automáticamente desde la primera fila)dict_reader.fieldnames
writeheader()Escribir la fila de encabezado (DictWriterexclusivo)dict_writer.writeheader()

Explicación de parámetros comunes

ParámetroDescripciónValor de ejemploMétodo aplicable
delimiterSeparador de campos','(predeterminado)'\t'reader/writer
quotecharCarácter de comillas (rodea campos especiales)'"'(predeterminado)reader/writer
quotingRegla de comillascsv.QUOTE_ALL(citar todo)reader/writer
skipinitialspaceIgnorar espacios después del separadorTrue/Falsereader
lineterminatorTerminador de línea'\r\n'(predeterminado)writer
dialectNombre de dialecto predefinido'excel'(predeterminado)Todos los métodos

Ejemplo

1. Leer archivos CSV

Ejemplo

import csv

with open('data.csv', 'r') as file:
    reader = csv.reader(file, delimiter=',')
    for row in reader:
        print(row)  # Cada fila es una lista

2. Escribir archivos CSV

Ejemplo

data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)  # Escribir múltiples filas

3. Usar DictReader y DictWriter (con encabezado)

Ejemplo

# Leer
with open('data.csv', 'r') as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
        print(row['Name'], row['Age'])  # Acceder mediante el nombre del campo

# Escribir
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
    dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
    dict_writer.writeheader()  # Escribir encabezado
    dict_writer.writerow({'Name': 'Alice', 'Age': 25})

4. Personalizar dialectos (como manejar archivos TSV)

Ejemplo

csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)

with open('data.tsv', 'r') as file:
    reader = csv.reader(file, dialect='tsv')
    for row in reader:
        print(row)
Otras extensiones