Cómo escribir datos en un archivo CSV línea por línea con Python: Guía completa

Python es un lenguaje de programación muy eficaz para el procesamiento de datos, y la manipulación de archivos CSV es parte de ello. Los archivos CSV se utilizan ampliamente para almacenar y compartir datos. En este artículo, explicaremos detalladamente cómo escribir datos en un archivo CSV línea por línea de manera eficiente utilizando Python, con ejemplos específicos de código y casos prácticos. Proporcionamos información útil para principiantes y expertos, así que asegúrese de leer hasta el final.

Índice

Conceptos básicos para trabajar con archivos CSV en Python

Un archivo CSV (Comma-Separated Values) es un formato simple y efectivo para almacenar datos en forma de tabla. Cada fila representa un registro, y cada columna representa un campo de datos. Python incluye el módulo “csv” en su biblioteca estándar, lo que facilita la lectura y escritura de archivos CSV.

Estructura de un archivo CSV

Un archivo CSV está compuesto por datos de texto separados por comas como se muestra a continuación:

Nombre, Edad, Profesión
Taro, 30, Ingeniero
Hanako, 25, Diseñadora

Usar el módulo csv de Python

Importando el módulo “csv” en Python, se pueden leer y escribir archivos CSV fácilmente. A continuación se muestra cómo hacer la importación básica:

import csv

Cómo escribir datos en un archivo CSV

Para escribir datos en un archivo CSV utilizando Python, se utiliza principalmente la clase “csv.writer”. Esta clase permite escribir datos en un archivo CSV de manera eficiente.

Procedimiento básico para escribir en un archivo CSV

Primero, veamos los pasos básicos para escribir en un archivo CSV. Siga estos pasos:

  1. Abrir el archivo CSV
  2. Crear un objeto csv.writer
  3. Escribir datos utilizando el método writerow
  4. Cerrar el archivo

Abrir un archivo CSV

Para abrir un archivo CSV, se utiliza la función incorporada “open” de Python. Para abrirlo en modo de escritura, se especifica “‘w'”:

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)

Crear un objeto csv.writer

Al crear un objeto csv.writer, se está listo para escribir datos en el archivo CSV. Este objeto se crea pasando el objeto de archivo como argumento.

    writer = csv.writer(file)

Escribir datos utilizando el método writerow

El método writerow se usa para escribir datos en formato de lista, una fila a la vez. Aquí hay un ejemplo:

    writer.writerow(['Nombre', 'Edad', 'Profesión'])
    writer.writerow(['Taro', '30', 'Ingeniero'])
    writer.writerow(['Hanako', '25', 'Diseñadora'])

Cerrar el archivo

Una vez que se han terminado las operaciones con el archivo, es importante cerrarlo. Si se utiliza la sintaxis with, el archivo se cierra automáticamente.

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Nombre', 'Edad', 'Profesión'])
    writer.writerow(['Taro', '30', 'Ingeniero'])
    writer.writerow(['Hanako', '25', 'Diseñadora'])


a5

Tipos de modos de escritura en archivos CSV

Al escribir datos en un archivo CSV con Python, es importante seleccionar el modo de escritura adecuado. Los modos principales son “modo de sobrescritura” y “modo de adición”, que deben usarse según el propósito.

Modo de sobrescritura (‘w’)

El modo de sobrescritura se usa cuando se desea reemplazar el contenido existente del archivo con nuevos datos. Cuando el archivo se abre en este modo, todos los datos existentes se borran y solo se escribe el nuevo contenido.

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Nombre', 'Edad', 'Profesión'])
    writer.writerow(['Taro', '30', 'Ingeniero'])

Modo de adición (‘a’)

El modo de adición se usa para agregar datos a un archivo existente. Cuando el archivo se abre en este modo, los datos existentes permanecen intactos y los nuevos datos se agregan al final del archivo.

with open('example.csv', mode='a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Hanako', '25', 'Diseñadora'])

Puntos a considerar para la selección del modo

  • Modo de sobrescritura se usa cuando se necesita reemplazar completamente el archivo existente con un nuevo conjunto de datos. Es útil, por ejemplo, al actualizar el archivo con datos recientes diariamente.
  • Modo de adición se usa cuando se desea mantener los datos existentes y agregar nuevos datos. Es ideal para archivos de registro o para la recopilación continua de datos.

Ejemplo completo de código

A continuación, se muestra un ejemplo de cómo usar los modos de sobrescritura y adición:

import csv

# Escribir nuevos datos en modo de sobrescritura
with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Nombre', 'Edad', 'Profesión'])
    writer.writerow(['Taro', '30', 'Ingeniero'])

# Agregar datos en modo de adición
with open('example.csv', mode='a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Hanako', '25', 'Diseñadora'])

Cuando se ejecuta este código, se sobrescriben los datos en el archivo example.csv y luego se agregan más datos al final.

Ejemplos de código prácticos y su explicación

Aquí mostramos ejemplos específicos de código para escribir datos en un archivo CSV con Python y explicamos en detalle su funcionamiento. Esto ayudará a comprender desde los usos básicos hasta los avanzados.

Ejemplo básico de escritura

Veamos primero un ejemplo básico de escritura. En este ejemplo, escribiremos datos simples en un archivo CSV.

import csv

data = [
    ['Nombre', 'Edad', 'Profesión'],
    ['Taro', '30', 'Ingeniero'],
    ['Hanako', '25', 'Diseñadora']
]

with open('example.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    for row in data:
        writer.writerow(row)

El código funciona de la siguiente manera:

  1. El archivo CSV se abre en modo “w”, lo que crea un nuevo archivo o sobrescribe uno existente.
  2. Se crea un objeto csv.writer.
  3. El método writerow se usa para escribir los datos en el archivo, fila por fila.

Ejemplo de escritura en formato de diccionario

A continuación, mostramos un ejemplo para escribir datos en formato de diccionario en un archivo CSV. Esto permite usar las claves como encabezados.

import csv

data = [
    {'Nombre': 'Taro', 'Edad': '30', 'Profesión': 'Ingeniero'},
    {'Nombre': 'Hanako', 'Edad': '25', 'Profesión': 'Diseñadora'}
]

with open('example_dict.csv', mode='w', newline='') as file:
    fieldnames = ['Nombre', 'Edad', 'Profesión']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for row in data:
        writer.writerow(row)

Puntos clave del código:

  1. Se utiliza DictWriter para escribir datos en formato de diccionario en el archivo CSV.
  2. Se especifican los fieldnames para definir los encabezados.
  3. El método writeheader se usa para escribir la fila de encabezados.
  4. El método writerow se usa para escribir los datos en formato de diccionario fila por fila.

Ejemplo de adición de datos

A continuación, mostramos un ejemplo para agregar datos a un archivo CSV existente. En este caso, el modo se establece en “a”.

import csv

additional_data = [
    ['Jiro', '28', 'Marketing'],
    ['Saburo', '35', 'Gerente de proyectos']
]

with open('example.csv', mode='a', newline='') as file:
    writer = csv.writer(file)
    for row in additional_data:
        writer.writerow(row)

Puntos clave del código:

  1. El archivo se abre en modo “a”, manteniendo los datos existentes mientras se agregan nuevos datos.
  2. Se agregan nuevos datos fila por fila.

Estos ejemplos ayudan a aprender los métodos básicos y avanzados para escribir en archivos CSV con Python.

Ejemplo avanzado: Escritura secuencial de múltiples datos

En aplicaciones reales, a menudo es necesario manejar grandes volúmenes de datos y es importante escribir los datos secuencialmente. A continuación, mostramos un ejemplo avanzado de cómo escribir múltiples datos secuencialmente en un archivo CSV con Python.

Escritura de datos dinámicos

Mostramos un ejemplo para escribir datos generados dinámicamente en un archivo CSV. Este método es útil para la recopilación de datos o para guardar registros.

import csv
import random
import time

# Función para generar datos ficticios
def generate_data():
    names = ['Taro', 'Hanako', 'Jiro', 'Saburo']
    ages = range(20, 40)
    professions = ['Ingeniero', 'Diseñador', 'Marketing', 'Gerente de proyectos']

    return {
        'Nombre': random.choice(names),
        'Edad': random.choice(ages),
        'Profesión': random.choice(professions)
    }

# Función para escribir datos en un archivo CSV
def write_data_to_csv(file_name, data):
    with open(file_name, mode='a', newline='') as file:
        fieldnames = ['Nombre', 'Edad', 'Profesión']
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # Escribir el encabezado solo si el archivo está vacío
        if file.tell() == 0:
            writer.writeheader()

        writer.writerow(data)

# Generar y escribir datos secuencialmente en el archivo CSV
file_name = 'dynamic_data.csv'
for _ in range(10):  # Generar y escribir datos 10 veces
    data = generate_data()
    write_data_to_csv(file_name, data)
    time.sleep(1)  # Generar datos a intervalos de 1 segundo

Puntos clave del código:

  1. La función generate_data genera datos ficticios.
  2. La función write_data_to_csv escribe datos en un archivo CSV. Verifica si el archivo ya contiene un encabezado y lo escribe si es necesario.
  3. Se generan datos secuencialmente y se escriben en el archivo CSV a intervalos de 1 segundo.

Filtrado y escritura de datos

Mostramos un ejemplo para filtrar datos basados en ciertas condiciones y escribir solo esos datos en un archivo CSV.

import csv

# Datos de muestra
data = [
    {'Nombre': 'Taro', 'Edad': 30, 'Profesión': 'Ingeniero'},
    {'Nombre': 'Hanako', 'Edad': 25, 'Profesión': 'Diseñadora'},
    {'Nombre': 'Jiro', 'Edad': 28, 'Profesión': 'Marketing'},
    {'Nombre': 'Saburo', 'Edad': 35, 'Profesión': 'Gerente de proyectos'}
]

# Función de filtrado
def filter_data(data, age_threshold):
    return [row for row in data if row['Edad'] > age_threshold]

# Escribir los datos filtrados en el archivo
filtered_data = filter_data(data, 30)

with open('filtered_data.csv', mode='w', newline='') as file:
    fieldnames = ['Nombre', 'Edad', 'Profesión']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for row in filtered_data:
        writer.writerow(row)

Puntos clave del código:

  1. La función filter_data filtra los datos. En este ejemplo, se seleccionan solo los datos de personas mayores de 30 años.
  2. Los datos filtrados se escriben en un archivo CSV.

Estos ejemplos avanzados ayudan a comprender mejor cómo realizar tareas prácticas de escritura de datos y a mejorar las habilidades de procesamiento de datos con Python.

Errores comunes y cómo manejarlos

Al escribir en archivos CSV, es común encontrar algunos errores. A continuación, describimos los errores más comunes y cómo manejarlos.

PermissionError (Error de permisos)

Este error ocurre cuando el archivo está abierto o en uso por otro proceso.

import csv

try:
    with open('example.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Nombre', 'Edad', 'Profesión'])
        writer.writerow(['Taro', '30', 'Ingeniero'])
except PermissionError:
    print("No se puede acceder al archivo. Asegúrese de que ningún otro programa lo esté usando.")

Soluciones:

  • Asegúrese de que el archivo no esté abierto en otro programa.
  • Verifique los permisos del archivo.

FileNotFoundError (Error de archivo no encontrado)

Ocurre cuando se intenta escribir en un directorio inexistente.

import csv

try:
    with open('nonexistent_directory/example.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Nombre', 'Edad', 'Profesión'])
        writer.writerow(['Taro', '30', 'Ingeniero'])
except FileNotFoundError:
    print("El directorio especificado no existe. Verifíquelo.")

Soluciones:

  • Verifique que la ruta del archivo sea correcta.
  • Si es necesario, cree el directorio.

csv.Error (Error del módulo CSV)

Este error ocurre cuando se utilizan datos en un formato incorrecto con el módulo csv.

import csv

try:
    with open('example.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Nombre', 'Edad', 'Profesión'])
        writer.writerow(['Taro', '30', 'Ingeniero'])
        writer.writerow(['Hanako', '25', 'Diseñadora'])
except csv.Error as e:
    print(f"Ocurrió un error al procesar el archivo CSV: {e}")

Soluciones:

  • Verifique que el formato de los datos sea correcto.
  • Revise si los datos contienen caracteres especiales o codificación incorrecta.

UnicodeEncodeError (Error de codificación)

Ocurre al escribir datos con caracteres especiales o codificaciones diferentes.

import csv

try:
    with open('example.csv', mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(['Nombre', 'Edad', 'Profesión'])
        writer.writerow(['Taro', '30', 'Ingeniero'])
except UnicodeEncodeError as e:
    print(f"Ocurrió un error de codificación: {e}")

Soluciones:

  • Especifique una codificación adecuada (por ejemplo, UTF-8).
  • Verifique si los datos contienen caracteres especiales.

Ejemplo general de manejo de errores

A continuación, mostramos un ejemplo de manejo de errores de manera integral para múltiples situaciones:

import csv

data = [
    ['Nombre', 'Edad', 'Profesión'],
    ['Taro', '30', 'Ingeniero'],
    ['Hanako', '25', 'Diseñadora']
]

try:
    with open('example.csv', mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        for row in data:
            writer.writerow(row)
except PermissionError:
    print("No se puede acceder al archivo. Asegúrese de que ningún otro programa lo esté usando.")
except FileNotFoundError:
    print("El directorio especificado no existe. Verifíquelo.")
except csv.Error as e:
    print(f"Ocurrió un error al procesar el archivo CSV: {e}")
except UnicodeEncodeError as e:
    print(f"Ocurrió un error de codificación: {e}")

Con estas soluciones, puede realizar la resolución de problemas cuando ocurren errores y mantener el proceso de escritura de archivos CSV funcionando sin problemas.

Ejercicios: Practique escribiendo datos

A continuación, presentamos algunos ejercicios para que practique escribiendo datos en un archivo CSV con Python. Esto le ayudará a poner en práctica lo aprendido y a profundizar en su comprensión.

Ejercicio 1: Escritura básica de datos

Siga los siguientes pasos para escribir datos básicos en un archivo CSV.

  1. Escriba un código para escribir los siguientes datos en un archivo CSV.
  2. El nombre del archivo debe ser “students.csv”.

Datos:

Nombre, Grado, Calificación
Tanaka, 1, A
Sato, 2, B
Suzuki, 3, A
import csv

data = [
    ['Nombre', 'Grado', 'Calificación'],
    ['Tanaka', '1', 'A'],
    ['Sato', '2', 'B'],
    ['Suzuki', '3', 'A']
]

with open('students.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    for row in data:
        writer.writerow(row)

Ejercicio 2: Escritura de datos en formato de diccionario

Practique escribiendo datos en un archivo CSV en formato de diccionario.

  1. Escriba los siguientes datos en formato de diccionario en un archivo llamado “products.csv”.

Datos:

data = [
    {'Producto': 'Cuaderno', 'Precio': '100', 'Stock': '50'},
    {'Producto': 'Bolígrafo', 'Precio': '50', 'Stock': '100'},
    {'Producto': 'Borrador', 'Precio': '30', 'Stock': '200'}
]
import csv

data = [
    {'Producto': 'Cuaderno', 'Precio': '100', 'Stock': '50'},
    {'Producto': 'Bolígrafo', 'Precio': '50', 'Stock': '100'},
    {'Producto': 'Borrador', 'Precio': '30', 'Stock': '200'}
]

with open('products.csv', mode='w', newline='') as file:
    fieldnames = ['Producto', 'Precio', 'Stock']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for row in data:
        writer.writerow(row)

Ejercicio 3: Adición de datos dinámicos

Agregue datos generados dinámicamente a un archivo CSV existente.

  1. Utilice el siguiente código para agregar datos aleatorios de 10 usuarios al archivo “users.csv”.

Código para generar datos:

import csv
import random

names = ['Yamada', 'Ito', 'Takahashi', 'Kobayashi', 'Saito']
ages = range(20, 50)

def generate_user_data():
    return {'Nombre': random.choice(names), 'Edad': random.choice(ages)}

with open('users.csv', mode='a', newline='', encoding='utf-8') as file:
    fieldnames = ['Nombre', 'Edad']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    # Escribir el encabezado solo si el archivo está vacío
    if file.tell() == 0:
        writer.writeheader()

    for _ in range(10):
        writer.writerow(generate_user_data())

Estos ejercicios le ayudarán a adquirir habilidades prácticas para escribir datos en archivos CSV utilizando Python.

Conclusión

En este artículo, hemos explicado cómo escribir datos en un archivo CSV línea por línea utilizando Python, cubriendo desde operaciones básicas hasta ejemplos avanzados y manejo de errores comunes. A continuación, resumimos los puntos clave.

Operaciones básicas

  • El módulo “csv” de la biblioteca estándar de Python facilita la lectura y escritura de archivos CSV.
  • Puede utilizar el objeto csv.writer para escribir datos y el objeto csv.DictWriter para escribir datos en formato de diccionario.

Selección del modo de escritura

  • Es importante elegir entre el modo de sobrescritura (‘w’) y el modo de adición (‘a’).
  • El modo de sobrescritura se usa para reemplazar el contenido existente, mientras que el modo de adición se usa para agregar nuevos datos.

Manejo de errores

  • Es posible que ocurran errores como PermissionError, FileNotFoundError, csv.Error y UnicodeEncodeError al trabajar con archivos CSV.
  • Es importante implementar un manejo de errores adecuado para garantizar que el programa sea robusto frente a fallos.

Práctica y aplicación

  • Aprendimos a escribir datos secuencialmente y manejar grandes volúmenes de datos en archivos CSV de manera eficiente.
  • Practicamos la escritura de datos en formato de diccionario y la filtración de datos bajo ciertas condiciones.

Utilice estos conocimientos para realizar operaciones prácticas de procesamiento de datos y manipulación de archivos en Python. Trabajar con archivos CSV en Python es una habilidad útil para muchas tareas de manejo de datos.

Índice