Saltearse al contenido

Lectura y escritura de archivos csv

Los archivos CSV (Comma Separated Values) son archivos de texto que almacenan datos tabulares en formato plano. Cada línea representa una fila de datos y cada valor está separado por comas (u otro delimitador como ;). Son ampliamente usados para exportar datos desde hojas de cálculo o bases de datos.

Tenemos la siguiente estructura de nuestro proyecto:

  • Directorysrc
    • leer_csv.py
    • escribir_csv.py
    • rescribir_csv.py
  • Directorydocs
    • products.csv

Para leer archivos CSV, Python proporciona el módulo incorporado csv. Este módulo permite recorrer filas, acceder a columnas por índice o nombre y manejar distintos delimitadores.

leer_csv.py
import csv
with open ('./docs/products.csv', 'r') as file:
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        print(row)

Este script abre un archivo CSV existente y agrega una nueva fila con los datos de un producto. Utiliza el modo ‘a’ para añadir al final sin borrar el contenido anterior.

escribir_csv.py
import csv
# Datos a añadir
nuevo_producto = {'name': 'Teclado', 'price': '45'}
# Añade una nueva fila al final del archivo
with open('./document/products.csv', 'a', newline='') as file:
fieldnames = ['name', 'price']
writer = csv.DictWriter(file, fieldnames=fieldnames)
# Escribe una nueva línea
writer.writerow(nuevo_producto)

Este script reemplaza completamente el contenido del archivo CSV con una nueva lista de productos. Utiliza el modo ‘w’ para sobrescribir el archivo desde cero, incluyendo el encabezado.

rescribir_csv.py
import csv
# Lista de productos para sobrescribir el archivo completo
productos = [
{'name': 'Monitor', 'price': '200'},
{'name': 'Auriculares','price': '80'}
]
# Sobrescribe el archivo completo con nuevos datos
with open('./document/products.csv', 'w', newline='') as file:
    fieldnames = ['name', 'price']
    writer = csv.DictWriter(file, fieldnames=fieldnames)
# Escribe encabezado y luego los datos
writer.writeheader()
writer.writerows(productos)