Mit nodejs möchte ich eine CSV-Datei mit 10000 Datensätzen analysieren und für jede Zeile eine Operation ausführen. Ich habe versucht, http://www.adaltas.com/projects/node-csv zu verwenden . Ich konnte das nicht in jeder Reihe pausieren lassen. Dies liest nur alle 10000 Datensätze durch. Ich muss Folgendes tun:
- Lesen Sie CSV Zeile für Zeile
- Führen Sie in jeder Zeile einen zeitaufwändigen Vorgang durch
- gehe zur nächsten Zeile
Kann jemand hier bitte alternative Ideen vorschlagen?
Antworten:
Anscheinend müssen Sie eine Stream-basierte Lösung verwenden. Es gab bereits solche Bibliotheken. Probieren Sie diese Bibliothek aus, die auch Validierungsunterstützung enthält, bevor Sie sich neu erfinden. https://www.npmjs.org/package/fast-csv
quelle
Ich habe diesen Weg benutzt: -
quelle
parse
ist es nicht definiert. Fehlt mir etwas? Wenn ich laufenpm install csv-parse
und dann in meinem Code hinzufügevar parse = require("csv-parse");
, dann funktioniert es. Bist du sicher, dass deine funktioniert? In jedem Fall liebe ich diese Lösung (auch wenn ich dascsv-parse
Modul einbinden musscsv-parse
Modul enthalten sein.Meine aktuelle Lösung verwendet das Async-Modul, um in Serie ausgeführt zu werden:
quelle
csv-parser
anstellecsv-parse
einiger der obigen Antworten.csv-parser
kam ungefähr 2 Jahre spätercsv-parse
.csv-parser
besser gefunden , da es einfach ist, Header damit zu handhaben.Installieren Sie zuerst den CSV-Parser:
Angenommen, Sie haben eine CSV-Datei wie diese:
Sie können den erforderlichen Vorgang wie folgt ausführen:
Weitere Informationen finden Sie unter
quelle
Um das Streaming in Fast-CSV anzuhalten , können Sie Folgendes tun:
quelle
Das Node-CSV-Projekt, auf das Sie verweisen, reicht vollständig aus, um jede Zeile eines großen Teils der CSV-Daten aus den Dokumenten unter http://csv.adaltas.com/transform/ : zu transformieren.
Aus meiner Erfahrung kann ich sagen, dass es sich auch um eine ziemlich schnelle Implementierung handelt. Ich habe damit an Datensätzen mit fast 10.000 Datensätzen gearbeitet und die Verarbeitungszeiten lagen für den gesamten Satz auf einem vernünftigen Niveau von zehn Millisekunden.
Wiederaufnahme des Stream-basierten Lösungsvorschlags von jurka : node-csv IS-Stream-basiert und folgt der Streaming-API von Node.js.
quelle
Das Fast-CSV- PMM-Modul kann Daten Zeile für Zeile aus der CSV-Datei lesen.
Hier ist ein Beispiel:
quelle
fromStream()
und auf seiner Projektseite fehlen Beispiele und Dokumentation.Ich brauchte einen asynchronen CSV-Reader und versuchte ursprünglich die Antwort von @Pransh Tiwari, konnte sie aber nicht mit
await
und zum Laufen bringenutil.promisify()
. Irgendwann bin ich auf node-csvtojson gestoßen , das so ziemlich dasselbe macht wie csv-parser, aber mit Versprechungen. Hier ist ein Beispiel für die Verwendung von csvtojson in Aktion:quelle
Probieren Sie das zeilenweise npm-Plugin aus.
quelle
Dies ist meine Lösung, um eine CSV-Datei von einer externen URL zu erhalten
quelle
Problemumgehung für diese Aufgabe mit await / async :
quelle
Ok, hier gibt es viele Antworten und ich glaube nicht, dass sie Ihre Frage beantworten, die meiner Meinung nach meiner ähnlich ist.
Sie müssen einen Vorgang ausführen, z. B. die Kontaktaufnahme mit einer Datenbank oder einer API eines dritten Teils, der einige Zeit in Anspruch nimmt und asyncronus ist. Sie möchten nicht das gesamte Dokument in den Speicher laden, weil es zu groß ist oder aus einem anderen Grund. Sie müssen also Zeile für Zeile lesen, um es zu verarbeiten.
Ich habe in die fs-Dokumente gelesen und es kann beim Lesen pausieren, aber wenn Sie den Aufruf .on ('data') verwenden, wird es kontinuierlich, welche der meisten dieser Antworten verwenden und das Problem verursachen.
UPDATE: Ich weiß mehr über Streams als ich jemals wollte
Der beste Weg, dies zu tun, besteht darin, einen beschreibbaren Stream zu erstellen. Dadurch werden die CSV-Daten in Ihren beschreibbaren Stream geleitet, mit dem Sie Asyncronus-Aufrufe verwalten können. Die Pipe verwaltet den Puffer bis zum Lesegerät, sodass Sie nicht zu viel Speicher benötigen
Einfache Version
Klassenversion
ALTE METHODE:
PROBLEM MIT lesbar
Sie werden eine
reading
Flagge bemerken . Ich habe festgestellt, dass aus irgendeinem Grund kurz vor dem Ende der Datei die .on ('lesbar') bei kleinen und großen Dateien ein zweites Mal aufgerufen wird. Ich bin mir nicht sicher warum, aber dies blockiert das von einem zweiten Prozess, der die gleichen Werbebuchungen liest.quelle
Ich benutze diese einfache: https://www.npmjs.com/package/csv-parser
Sehr einfach zu bedienen:
quelle
Ich habe verwendet,
csv-parse
aber bei größeren Dateien sind Leistungsprobleme aufgetreten. Eine der besseren Bibliotheken, die ich gefunden habe, ist Papa Parse . Die Dokumente sind gut, gut unterstützt, leichtgewichtig, keine Abhängigkeiten.Installieren
papaparse
Verwendung:
Hinweis
header: true
ist eine Option in der Konfiguration. Weitere Optionen finden Sie in den Dokumentenquelle
quelle
Sie können csv mit dem csv-to-json-Modul in das json-Format konvertieren und dann einfach die json-Datei in Ihrem Programm verwenden
quelle
npm install csv
Beispiel-CSV-Datei Zum Parsen benötigen Sie eine CSV-Datei. Entweder haben Sie bereits eine, oder Sie können den folgenden Text kopieren und in eine neue Datei einfügen und diese Datei "mycsv.csv" nennen.
Beispielcode Lesen und Analysieren der CSV-Datei
Erstellen Sie eine neue Datei und fügen Sie den folgenden Code ein. Lesen Sie unbedingt, was sich hinter den Kulissen abspielt.
Starten Sie Ihre App und überprüfen Sie die Funktionalität. Öffnen Sie eine Konsole und geben Sie den folgenden Befehl ein:
Knoten-App 1 Knoten-App Sie sollten die folgende Ausgabe in Ihrer Konsole sehen:
1 [MYCSV {Fieldone: 'ABC', Fieldtwo: '123', Fieldthree: 'Fudge'}, 2 MYCSV {Fieldone: '532', Fieldtwo: 'CWE', Fieldthree: 'ICECREAM'}, 3 MYCSV {Fieldone: '8023', Fieldtwo: 'POOP', Fieldthree: 'DOGS'}, 4 MYCSV {Fieldone: '441', Fieldtwo: 'CHEESE', Fieldthree: 'CARMEL'}, 5 MYCSV {Fieldone: '221', Fieldtwo: 'ABC', Fieldthree: 'HOUSE'},] Jetzt sollten Sie einen Webbrowser öffnen und zu Ihrem Server navigieren. Sie sollten sehen, dass die Daten im JSON-Format ausgegeben werden.
Fazit Mit node.js und seinem CSV-Modul können wir auf dem Server gespeicherte Daten schnell und einfach lesen, verwenden und dem Client auf Anfrage zur Verfügung stellen
quelle