web-dev-qa-db-fra.com

Comment puis-je lire un fichier local avec Papa Parse?

Comment puis-je lire un fichier local avec Papa Parse? J'ai un fichier appelé localement challanges.csv, mais après plusieurs essais, je ne peux pas l'analyser avec Papa Parse.

var data;

Papa.parse('challanges.csv', {
  header: true,
  dynamicTyping: true,
  complete: function(results) {
    console.log(results);
    data = results.data;
  }
});

Pour autant que je sache, j'ai des problèmes avec l'ouverture du fichier csv en tant que fichier. Comment puis-je le faire avec javascript?

7
adamb

L'API File suggérée par les documents de papaparse est destinée au navigateur utilisé. En supposant que vous exécutez cela sur le nœud côté serveur, ce qui fonctionne pour moi, c'est de tirer parti du flux lisible :

const fs = require('fs');
const papa = require('papaparse');
const file = fs.createReadStream('challenge.csv');
var count = 0; // cache the running count
papa.parse(file, {
    worker: true, // Don't bog down the main thread if its a big file
    step: function(result) {
        // do stuff with result
    },
    complete: function(results, file) {
        console.log('parsing complete read', count, 'records.'); 
    }
});

Il peut y avoir une interface plus facile, mais jusqu'à présent, cela fonctionne assez bien et offre la possibilité de streaming pour le traitement de gros fichiers.

10
Philip M.

C'est pour réitérer que la meilleure réponse est celle de Murat Seker.

Il suffit d'ajouter le à la config download: true et le chemin local sera téléchargé par Papa Parse. La réponse en streaming de Philip M. n'est pas la meilleure réponse.

var data;

Papa.parse('challanges.csv', {
  header: true,
  download: true,
  dynamicTyping: true,
  complete: function(results) {
    console.log(results);
    data = results.data;
  }
});

P.S. Je n'ai pas assez de réputation pour commenter la réponse de Murat Seker. J'ai donc republié une réponse. Tout amour envers la réputation sera apprécié. :-)

0
David Bernat

Vous devez ajouter une ligne de plus dans votre configuration: download: true,.

var data;

Papa.parse('../challanges.csv', {
  header: true,
  download: true,
  dynamicTyping: true,
  complete: function(results) {
    console.log(results);
    data = results.data;
  }
});

Mise à jour: avec cette réponse, vous n'avez pas besoin d'un objet FILE. Vous pouvez passer le nom de fichier et papa parse le "téléchargera".

0
Murat Seker