Offline-CSV-Validator

Ich habe viele Bash-Skripte, die verschiedene Datenquellen in CSV konvertieren.
Die Skripte haben oft Fehler, daher würde ich gerne einen Validierungsschritt hinzufügen.

Gibt es ein Tool zum Validieren der CSV-Datei?

Anforderungen:

  • Frei,
  • Befehlszeile,
  • Verwendbar unter Linux,
  • Funktioniert offline,
  • Das Tool sollte zumindest sicherstellen, dass die CSV-Regeln eingehalten werden, die sie in Excel und Calc ladbar machen.

Es ist in Ordnung, wenn das Tool zum Beispiel erfordert ;und nicht ,, ich kann es anpassen. Alle meine Werte stehen in Anführungszeichen.

Antworten (4)

Sie könnten das reibungslose CLI und insbesondere den Befehl validate verwenden:

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

Die Standard-Syntax des Befehls ist

frictionless validate input.csv

und Sie haben einfach wieder

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

Es ist sehr nützlich, Massenanalysen durchzuführen, um eine JSON-Validierungsausgabe zu erhalten. Dies ist ein Beispiel .

Es ist nicht notwendig, Validierungsregeln zu definieren, es führt eine Reihe klassischer Tests für dieses Dateiformat durch.

Sie können aber auch eine Reihe von Regeln definieren, um die CSV auf eine von Ihnen definierte Weise zu überprüfen .

Ihre Antwort könnte durch zusätzliche unterstützende Informationen verbessert werden. Bitte bearbeiten Sie , um weitere Details wie Zitate oder Dokumentation hinzuzufügen, damit andere bestätigen können, dass Ihre Antwort richtig ist. Weitere Informationen zum Verfassen guter Antworten finden Sie in der Hilfe .
Sieht gut aus! Würden Sie bitte ein paar Details hinzufügen, damit Ihre Antwort gemäß unseren Website-Regeln gültig ist? Kann es auch die Syntax einer CSV-Datei überprüfen, ohne vorher die Spaltennamen/-formate zu kennen?
@NicolasRaoul Ich habe einige Details hinzugefügt, danke

Es ist etwas unklar, wie weit Ihre Anforderungen reichen, aber im Allgemeinen haben die meisten Skriptsprachen einen eigenen CSV-Parser und können von der Befehlszeile aus verwendet werden. Wenn Ihre CSV-Datei einen Fehler enthält, sollte ein Parser ihn finden.

Zum Beispiel:

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

führt dazu, dass das Skript keine Ausgabe und einen Exit-Code von erzeugt0

Wohingegen:

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

Erzeugt einen Exit-Code von 1und die Ausgabe:

/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>'

Ich weiß nicht, ob seine Anforderungen die gleichen sind wie die von Excel.

Werfen Sie einen Blick auf csvkit , eine Python-Bibliothek zum Arbeiten mit CSV-Daten mit begleitenden Befehlszeilenskripten. Es ist so konzipiert, dass es intelligent mit der Zeichencodierung umgeht (und kann zum Konvertieren oder Normalisieren Ihrer Codierungen verwendet werden), und da es das Python- csvModul verwendet, ist es ziemlich zuverlässig in Bezug auf das Lesen und Schreiben gemäß den Spezifikationen.

Es wurde unter Berücksichtigung der UNIX-Prinzipien entwickelt und eignet sich daher gut für Pipes und dergleichen. Ein einfacher Test könnte darin bestehen, Ihre Daten zu durchlaufen csvcut -n [filename] | wc -lund zu überprüfen, ob sie die erwartete Anzahl von Spalten haben.

Das csvstatTool leitet einen Datentyp für jede Spalte ab, was für die Validierung nützlich sein könnte. Das Analysieren der Ausgabe ist weniger einfach, obwohl ich als gelegentlicher Mitwirkender an der Bibliothek riskieren würde, dass eine Pull-Anforderung, die einen Befehlszeilenschalter bietet, um eine andere Art von Ausgabe zu erhalten, die einfacher zu analysieren ist, definitiv in Betracht gezogen würde csvstat. (Vielleicht wäre es als anderer Befehl sinnvoll – darüber habe ich nicht so viel nachgedacht.)

Sie könnten die Bash selbst verwenden, um einen guten Validator für die CSV-Datei zu schreiben. Sie können auf diesen vorherigen Beitrag
verweisen . Es erklärt, wie man den Befehl „awk“ verwendet, um einen Validator für Felder und für die Datei selbst zu realisieren