Validador de CSV sin conexión

Tengo muchos scripts bash que convierten varias fuentes de datos a CSV.
Los scripts a menudo tienen errores, por lo que me gustaría agregar un paso de validación.

¿Existe una herramienta para validar el archivo CSV?

Requisitos:

  • Libre,
  • Línea de comando,
  • Utilizable en Linux,
  • Funciona sin conexión,
  • La herramienta debería al menos asegurarse de que el CSV respete las reglas que lo harán cargable en Excel y Calc.

Está bien si la herramienta requiere, por ejemplo, ;y no ,, puedo adaptarme. Todos mis valores están entre comillas.

Respuestas (4)

Puede usar el cli sin fricción y, en particular, el comando de validación:

https://framework.frictionlessdata.io/docs/guides/validation-guide/

La sintaxis estándar del comando es

frictionless validate input.csv

y tienes de vuelta simplemente

# -----
# valid: input.csv
# -----

Es muy útil hacer análisis de forma masiva para tener una salida de validación json. Este es un ejemplo .

No es necesario definir reglas de validación, hace un conjunto de pruebas clásicas para este formato de archivo.

Pero también puede definir un conjunto de reglas para verificar el CSV de la manera que defina .

Su respuesta podría mejorarse con información de apoyo adicional. Edite para agregar más detalles, como citas o documentación, para que otros puedan confirmar que su respuesta es correcta . Puede encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda .
¡Se ve bien! Para que su respuesta sea válida según las reglas de nuestro sitio, ¿le importaría agregar algunos detalles? Además, ¿puede verificar la sintaxis de cualquier archivo CSV sin conocer de antemano los nombres/formatos de las columnas?
@NicolasRaoul He agregado algunos detalles, gracias

No está claro hasta dónde se extienden sus requisitos, pero en general, la mayoría de los lenguajes de secuencias de comandos tienen un analizador CSV propio y se pueden usar desde la línea de comandos. Si hay un error en su archivo CSV, un analizador debería encontrarlo.

Por ejemplo:

echo "one, two" | ruby -r csv -e 'CSV.parse(STDIN.read)'

da como resultado que el script no produzca salida y un código de salida de0

Mientras:

echo 'one, "two' | ruby -r csv -e 'CSV.parse(STDIN.read)'

Produce un código de salida de 1y la salida:

/usr/lib/ruby/1.9.1/csv.rb:1925:in `block (2 levels) in shift': Illegal quoting in line 1. (CSV::MalformedCSVError)
    from /usr/lib/ruby/1.9.1/csv.rb:1887:in `each'
    from /usr/lib/ruby/1.9.1/csv.rb:1887:in `block in shift'
    from /usr/lib/ruby/1.9.1/csv.rb:1849:in `loop'
    from /usr/lib/ruby/1.9.1/csv.rb:1849:in `shift'
    from /usr/lib/ruby/1.9.1/csv.rb:1791:in `each'
    from /usr/lib/ruby/1.9.1/csv.rb:1805:in `to_a'
    from /usr/lib/ruby/1.9.1/csv.rb:1805:in `read'
    from /usr/lib/ruby/1.9.1/csv.rb:1379:in `parse'
    from -e:1:in `<main>'

No sé si sus requisitos son los mismos que los de Excel.

Eche un vistazo a csvkit , una biblioteca de Python para trabajar con datos CSV con secuencias de comandos de línea de comandos que lo acompañan. Está diseñado para ser inteligente con respecto a la codificación de caracteres (y se puede usar para convertir o normalizar sus codificaciones) y dado que usa el csvmódulo de Python, es bastante confiable en términos de lectura y escritura de acuerdo con las especificaciones.

Está diseñado con los principios de UNIX en mente, por lo que se adapta bien a tuberías y similares. Una prueba simple podría ser ejecutar sus datos csvcut -n [filename] | wc -ly verificar que tengan el número esperado de columnas.

La csvstatherramienta inferirá un tipo de datos para cada columna, lo que podría ser útil para la validación. Analizar su salida es menos sencillo, aunque como colaborador ocasional de la biblioteca, me arriesgaría a que definitivamente se considere una solicitud de extracción que ofrezca un interruptor de línea de comando para obtener un tipo diferente de salida que sea más fácil de analizar csvstat. (Tal vez tendría sentido como un comando diferente; esto no es algo en lo que haya pensado mucho).

Puede usar el bash para escribir un buen validador para el archivo CSV.
Puedes consultar esta publicación anterior . Explica cómo usar el comando "awk" para realizar un validador de campos y del propio archivo.