Avec nodejs, je veux analyser un fichier .csv de 10000 enregistrements et effectuer une opération sur chaque ligne. J'ai essayé d'utiliser http://www.adaltas.com/projects/node-csv . Je ne pouvais pas faire une pause à chaque ligne. Cela lit simplement tous les 10000 enregistrements. Je dois faire ce qui suit:
- lire le csv ligne par ligne
- effectuer une opération chronophage sur chaque ligne
- aller à la ligne suivante
Quelqu'un peut-il suggérer des idées alternatives ici?
Réponses:
Il semble que vous deviez utiliser une solution basée sur le flux, il existait déjà de telles bibliothèques, alors avant de vous réinventer, essayez cette bibliothèque, qui comprend également la prise en charge de la validation. https://www.npmjs.org/package/fast-csv
la source
J'ai utilisé de cette façon: -
la source
parse
n'est pas défini. Y a-t-il quelque chose qui me manque? Quand je coursnpm install csv-parse
, puis dans mon code ajoutervar parse = require("csv-parse");
, cela fonctionne. Êtes-vous sûr que le vôtre fonctionne? Quoi qu'il en soit, j'adore cette solution (même si je dois inclure lecsv-parse
modulecsv-parse
module d' inclusion .Ma solution actuelle utilise le module async pour s'exécuter en série:
la source
csv-parser
au lieu d'êtrecsv-parse
utilisée dans certaines des réponses ci-dessus.csv-parser
est venu environ 2 ans aprèscsv-parse
.csv-parser
mieux, car il est facile de gérer les en-têtes.Installez d'abord le csv-parser:
Supposons donc que vous ayez un fichier csv comme celui-ci:
Vous pouvez effectuer l'opération requise comme suit:
Pour plus d'informations, reportez-vous
la source
Afin de mettre en pause le streaming dans fast-csv, vous pouvez faire ce qui suit:
la source
Le projet node-csv que vous référencez est tout à fait suffisant pour la tâche de transformation de chaque ligne d'une grande partie des données CSV, à partir de la documentation à l' adresse : http://csv.adaltas.com/transform/ :
D'après mon expérience, je peux dire que c'est aussi une implémentation assez rapide, j'ai travaillé avec elle sur des ensembles de données avec près de 10k enregistrements et les temps de traitement étaient à un niveau raisonnable de dizaines de millisecondes pour l'ensemble.
Réorganisation de la suggestion de solution basée sur le flux de jurka : node-csv est basé sur le flux et suit l'API de streaming de Node.js.
la source
Le module npm fast-csv peut lire les données ligne par ligne à partir du fichier csv.
Voici un exemple:
la source
fromStream()
et son site de projet manque d'exemples et de documentation.J'avais besoin d'un lecteur csv asynchrone et j'ai initialement essayé la réponse de @Pransh Tiwari mais je n'ai pas pu la faire fonctionner avec
await
etutil.promisify()
. Finalement, je suis tombé sur node-csvtojson , qui fait à peu près la même chose que csv-parser, mais avec des promesses. Voici un exemple d'utilisation de csvtojson en action:la source
Essayez le plugin npm ligne par ligne.
la source
c'est ma solution pour obtenir un fichier csv à partir d'une URL externe
la source
Solution de contournement pour effectuer cette tâche avec await / async :
la source
Ok donc il y a beaucoup de réponses ici et je ne pense pas qu'elles répondent à votre question qui, je pense, est similaire à la mienne.
Vous devez effectuer une opération comme contacter une base de données ou une API tierce qui prendra du temps et est asyncronus. Vous ne voulez pas charger le document entier en mémoire parce qu'il est trop volumineux ou pour une autre raison, vous devez donc lire ligne par ligne pour traiter.
J'ai lu les documents fs et cela peut faire une pause lors de la lecture, mais l'utilisation de l'appel .on ('data') rendra continuelle l'utilisation de la plupart de ces réponses et causera le problème.
MISE À JOUR: Je connais plus d'informations sur Streams que je ne l'aurais jamais voulu
La meilleure façon de procéder est de créer un flux inscriptible. Cela dirigera les données csv dans votre flux inscriptible que vous pourrez gérer les appels asyncronus. Le tube gérera le tampon jusqu'au lecteur afin que vous ne vous retrouviez pas avec une utilisation intensive de la mémoire
Version simple
Version de la classe
ANCIENNE MÉTHODE:
PROBLÈME AVEC lisible
Vous remarquerez un
reading
drapeau. J'ai remarqué que pour une raison quelconque, juste à la fin du fichier, le .on («lisible») est appelé une deuxième fois sur des fichiers petits et grands. Je ne sais pas pourquoi, mais cela bloque cela à partir d'un deuxième processus de lecture des mêmes éléments de campagne.la source
J'utilise celui-ci simple: https://www.npmjs.com/package/csv-parser
Très simple à utiliser:
la source
J'utilisais
csv-parse
mais pour les fichiers plus volumineux, il y avait des problèmes de performances, l'une des meilleures bibliothèques que j'ai trouvées est Papa Parse , les documents sont bons, un bon support, léger, pas de dépendances.Installer
papaparse
Usage:
La note
header: true
est une option sur la configuration, voir la documentation pour d'autres optionsla source
la source
Vous pouvez convertir csv au format json à l'aide du module csv-to-json, puis vous pouvez facilement utiliser le fichier json dans votre programme
la source
npm installer csv
Exemple de fichier CSV Vous allez avoir besoin d'un fichier CSV à analyser, donc soit vous en avez déjà un, soit vous pouvez copier le texte ci-dessous et le coller dans un nouveau fichier et appeler ce fichier "mycsv.csv"
Exemple de lecture et d'analyse de code du fichier CSV
Créez un nouveau fichier et insérez-y le code suivant. Assurez-vous de lire ce qui se passe dans les coulisses.
Démarrez votre application et vérifiez la fonctionnalité Ouvrez une console et tapez la commande suivante:
Node app 1 Node app Vous devriez voir la sortie suivante dans votre console:
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'},] Vous devez maintenant ouvrir un navigateur Web et accéder à votre serveur. Vous devriez le voir afficher les données au format JSON.
Conclusion En utilisant node.js et son module CSV, nous pouvons rapidement et facilement lire et utiliser les données stockées sur le serveur et les mettre à disposition du client sur demande
la source