>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Python

Domando el caos de las tablas directamente desde la terminal

Build status Coverage status PyPI downloads Version License Support Python versions

Si recibes exportaciones de datos con regularidad, probablemente conoces el dolor. Un archivo de trescientos megabytes, codificación Windows-1251, el delimitador es un punto y coma en algunos lugares y una coma en otros, y hay saltos de línea sin escapar dentro de las filas. Abrir esto en Excel es una forma segura de congelar completamente tu suite de oficina o de eliminar accidentalmente los ceros iniciales de los números de teléfono. Escribir un script rápido con pandas solo para hacer una verificación también es una molestia.

En estas situaciones, csvkit viene al rescate: un conjunto de utilidades de línea de comandos para trabajar con datos tabulares. El proyecto está en GitHub desde 2011, ha recopilado más de 6400 estrellas, y sigue siendo una de las formas más convenientes de diseccionar archivos CSV directamente en bash.

Qué puede hacer este conjunto de utilidades

Los creadores del paquete, el medio de comunicación Wire Services, se inspiraron en herramientas como pdftk y GDAL. La idea es simple: proporcionar a los desarrolladores y analistas de datos un conjunto de comandos especializados para tuberías UNIX para limpiar, cortar, formatear y explorar archivos tabulares sin escribir código.

Las utilidades se dividen por tarea: conversión, corte, análisis y ejecución de consultas SQL.

Vista previa rápida y estadísticas básicas

El comando csvlook convierte CSV sin formato en una tabla ASCII limpia con la alineación correcta de columnas. Combinado con head o less, obtienes una excelente vista previa:

head -n 20 data.csv | csvlook

Si necesitas entender la estructura de un archivo desconocido, ejecuta csvstat. La utilidad analiza los tipos de datos en cada columna, encuentra valores faltantes, calcula mínimo, máximo, promedio y muestra una lista de los valores más frecuentes:

csvstat data.csv

Corte y filtrado

Las utilidades UNIX tradicionales como cut y grep a menudo fallan en CSVs complejos cuando aparecen comas o saltos de línea dentro de campos entre comillas. El paquete tiene alternativas especializadas:

csvcut corta las columnas necesarias por nombre o número:

csvcut -c "user_id,email,status" users.csv > clean_users.csv

csvgrep filtra filas por valores o expresiones regulares:

csvgrep -c "status" -m "active" users.csv

SQL directamente sobre archivos

Uno de los comandos más convenientes es csvsql. Puede hacer dos cosas. Primero, genera un esquema DDL para PostgreSQL, MySQL o SQLite basándose en el análisis de tipos de datos en el archivo. Segundo, te permite escribir consultas SQL directamente contra archivos CSV en disco a través de SQLite integrado:

csvsql --query "select status, count(*) from users group by status" users.csv

También puedes unir dos archivos diferentes como si fueran tablas de base de datos regulares:

csvsql --query "select u.name, o.total from users u join orders o on u.id = o.user_id" users.csv orders.csv

Conversión de formatos

La herramienta in2csv convierte prácticamente cualquier cosa a CSV: archivos Excel (.xls y .xlsx), JSON, NDJSON y ancho fijo. No hay necesidad de iniciar Excel solo para guardar nuevamente un informe recibido:

in2csv report.xlsx --sheet "Sales" > sales.csv

Cómo funciona internamente

El paquete está escrito en Python y se distribuye a través de PyPI. Utiliza SQLAlchemy para operaciones de base de datos, lo que explica la flexibilidad de csvsql al trabajar con diferentes dialectos SQL.

La principal ventaja de la arquitectura es la compatibilidad con entrada y salida estándar (stdin/stdout). Los comandos se encadenan fácilmente a través de una tubería regular:

in2csv data.xlsx | csvgrep -c "country" -m "RU" | csvcut -c 1,3,5 | csvlook

Sin embargo, este enfoque tiene un inconveniente. Dado que la biblioteca está escrita en Python puro con verificación de tipos en tiempo de ejecución, el rendimiento disminuye en archivos de varios gigabytes. Para exportaciones a escala de terabytes, es mejor usar xsv en Rust o duckdb, pero para tareas cotidianas de hasta un par de cientos de megabytes, la velocidad de csvkit es más que suficiente.

Dónde resulta útil en la práctica

  1. Verificar la estructura de datos en un servidor remoto sin GUI.
  2. Pre-limpiar archivos en scripts bash antes de cargarlos en un pipeline ETL.
  3. Generar esquemas de tablas de base de datos para una nueva exportación (csvsql -i postgresql data.csv).
  4. Fusionar rápidamente dos archivos dispares por una clave común a través de csvjoin.

¿Vale la pena instalarlo?

El paquete se instala con un solo comando pip:

pip install csvkit

Si analizas registros con frecuencia, trabajas con importaciones de bases de datos o recibes informes como archivos con Excel y CSV, este conjunto de utilidades te ahorrará muchos nervios. Elimina la necesidad de abrir un editor pesado o escribir scripts improvisados para el filtrado básico de dos columnas. Comienza con csvlook y in2csv: se amortizan la instalación en los primeros cinco minutos de uso.

Proyectos relacionados