5 - Manejo de Datos Especiales en CSV

Los archivos CSV, a pesar de su simplicidad, pueden presentar desafíos cuando los datos contienen caracteres especiales como comas, saltos de línea o comillas. Entender cómo manejar estos casos es crucial para evitar errores de parseo.

Campos con comillas y separadores internos

Cuando un campo de datos contiene el carácter delimitador (por ejemplo, una coma en un archivo CSV delimitado por comas) o comillas dobles, el estándar CSV indica que todo el campo debe encerrarse entre comillas dobles. Si el campo ya contiene comillas dobles, estas deben ser "escapadas" duplicándolas.

Ejemplo:

Producto,Descripción,Precio
"Manzana","Una fruta roja, dulce y crujiente",1.50
"Libro","""El Quijote"", una obra maestra",20.00
Naranja,Fruta cítrica,1.20
  • La descripción de la manzana contiene una coma, por lo que todo el campo está entre comillas dobles.
  • La descripción del libro contiene comillas dobles (para "El Quijote"), por lo que esas comillas internas se duplican ("""El Quijote""") y todo el campo se encierra entre comillas dobles.

La mayoría de las bibliotecas de parseo de CSV manejan esto automáticamente, pero es importante ser consciente de esta convención.

Manejo de saltos de línea dentro de una celda

Un campo CSV también puede contener saltos de línea. Para que el parser no interprete el salto de línea como el final de una fila, el campo completo debe estar encerrado entre comillas dobles.

Ejemplo:

ID,Comentario
1,"Este es un comentario
con múltiples líneas."
2,Comentario de una sola línea.

Aquí, el comentario para el ID 1 se extiende a lo largo de dos líneas en el archivo CSV, pero se considera un único campo debido a las comillas dobles que lo encierran.

Datos nulos o vacíos

Los datos nulos o vacíos en CSV se representan generalmente de dos maneras:

  • Campo vacío: Simplemente se deja el espacio entre delimitadores sin ningún valor. Por ejemplo, valor1,,valor3 indica que el segundo campo está vacío.
  • Campo con un valor específico para nulo: Algunas aplicaciones utilizan cadenas como NULL, NA, N/A o - para representar valores nulos. Es importante conocer la convención utilizada en el archivo para interpretarlos correctamente.

Ejemplo:

Nombre,Edad,Email
Juan,30,juan@example.com
Ana,,ana@example.com
Carlos,40,

En este ejemplo, Ana tiene un campo de edad vacío, y Carlos tiene un campo de email vacío.

Diferentes codificaciones y cómo detectarlas

Como se mencionó en la introducción, la codificación de caracteres es fundamental. Si un archivo CSV se lee con la codificación incorrecta, los caracteres especiales (acentos, eñes, símbolos) aparecerán como símbolos extraños o ilegibles (mojibake).

Codificaciones comunes:

  • UTF-8: La codificación universal y recomendada. Soporta todos los caracteres y es compatible con ASCII.
  • ISO-8859-1 (Latin-1): Común en Europa Occidental.
  • Windows-1252 (ANSI): Una extensión de ISO-8859-1, muy usada en sistemas Windows.

Cómo detectar la codificación:

  • Preguntar al origen: La forma más fiable es preguntar a quien generó el archivo qué codificación utilizó.
  • Probar: Si no se conoce, se puede intentar abrir el archivo con diferentes codificaciones (UTF-8, luego ISO-8859-1/Windows-1252) hasta que los caracteres se muestren correctamente.
  • Herramientas de detección: Existen herramientas y bibliotecas que intentan adivinar la codificación. Por ejemplo, en Python, la biblioteca chardet puede ser útil:
    import chardet
    
    with open('archivo.csv', 'rb') as rawdata:
        result = chardet.detect(rawdata.read(10000)) # Lee los primeros 10KB
    
    print(result) # {'encoding': 'UTF-8', 'confidence': 0.99, 'language': ''}
  • Editores de texto avanzados: Muchos editores de texto (VS Code, Sublime Text, Notepad++) pueden detectar y mostrar la codificación de un archivo.

Siempre que sea posible, se debe estandarizar el uso de UTF-8 para evitar estos problemas.