Pregunta breve: ¿Cómo puedo detectar automáticamente si un archivo CSV tiene encabezados en la primera fila?Detección automática de la presencia de encabezados CSV en un archivo
Detalles: He escrito un pequeño motor de análisis CSV que coloca los datos en un objeto al que puedo acceder como (aproximadamente) una base de datos en memoria. El código original se escribió para analizar CSV de terceros con un formato predecible, pero me gustaría poder usar este código de manera más general.
Estoy tratando de encontrar una manera confiable de detectar automáticamente la presencia de encabezados CSV, por lo que el script puede decidir si usar la primera fila del archivo CSV como claves/nombres de columna o comenzar a analizar datos inmediatamente. Como todo lo que necesito es una prueba booleana, podría especificar fácilmente un argumento después de inspeccionar el archivo CSV, pero preferiría no tener que hacerlo (ir a la automatización).
Imagino que tendría que analizar los primeros 3? filas del archivo CSV y busca un patrón de algún tipo para compararlo con los encabezados. Estoy teniendo pesadillas de tres casos particularmente malos en los que:
- Las cabeceras incluyen datos numéricos por alguna razón
- Las primeras filas (o grandes porciones de la CSV) son nulos
- Hay encabezados y datos parecen demasiado similares para distinguirlos
Si puedo obtener una "mejor estimación" y hacer que el analizador falle con un error o escupe una advertencia si no puede decidir, está bien. Si esto es algo que va a ser tremendamente caro en términos de tiempo o computación (y toma más tiempo de lo que se supone que debe salvarme), felizmente desecharé la idea y volveré a trabajar en "cosas importantes".
Estoy trabajando con PHP, pero esto me parece más una cuestión algorítmica/computacional que algo específico de la implementación. Si hay un algoritmo simple que puedo usar, genial. Si puede indicarme alguna teoría/discusión relevante, también sería genial. Si hay una biblioteca gigante que hace procesamiento de lenguaje natural o 300 tipos diferentes de análisis sintáctico, no estoy interesado.
No creo que pueda alcanzar la "fiabilidad" adivinando los encabezados. A menos que sus datos sean bastante consistentes (por ejemplo, son todos los números y es fácil discernir los encabezados y los datos). –
Bueno, cualquier prueba solo tiene que detectar exitosamente un encabezado en una columna, y el resultado puede aplicarse posteriormente a todo el archivo. Si hay un conjunto razonable de criterios que se pueden aplicar a al menos ciertos tipos de datos/columnas, aún puede funcionar la mayor parte del tiempo. – cbednarski