如何使用Papa Parse读取本地文件?

时间:2018-04-10 11:49:52

标签: javascript node.js csv papaparse

如何使用Papa Parse读取本地文件?我有一个本地名为challanges.csv的文件,但经过多次尝试后我无法用Papa Parse解析它。

var data;

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

据我所知,我在将csv文件作为File打开时遇到问题。我怎么能用javascript做到这一点?

4 个答案:

答案 0 :(得分:6)

papaparse的文档建议的File API供浏览器使用。假设您正在服务器端的节点上运行此命令,那么对我有用的就是利用readable stream

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.'); 
    }
});

可能有一个更简单的界面,但是到目前为止,它的运行效果很好,并提供了处理大型文件的流媒体选项。

答案 1 :(得分:4)

这些都不适合我,我特别想在csv 服务器端非客户端(在浏览器中)中阅读。这对我有用。

异步/等待

const fs = require('fs');
const Papa = require('papaparse');

const csvFilePath = 'data/test.csv'

// Function to read csv which returns a promise so you can do async / await.

const readCSV = async (filePath) => {
  const csvFile = fs.readFileSync(filePath)
  const csvData = csvFile.toString()  
  return new Promise(resolve => {
    Papa.parse(csvData, {
      header: true,
      complete: results => {
        console.log('Complete', results.data.length, 'records.'); 
        resolve(results.data);
      }
    });
  });
};

const test = async () => {
  let parsedData = await readCSV(csvFilePath); 
}

test()

如果您不希望允诺/异步,请等待,然后可以使用它。

回调

const fs = require('fs');
const Papa = require('papaparse');

const csvFilePath = 'data/test.csv'

const file = fs.createReadStream(csvFilePath);

var csvData=[];
Papa.parse(file, {
  header: true,
  step: function(result) {
    csvData.push(result.data)
  },
  complete: function(results, file) {
    console.log('Complete', csvData.length, 'records.'); 
  }
});

注意header: true是配置中的一个选项,有关其他选项,请参阅文档

答案 2 :(得分:0)

这是重申最佳答案是Murat Seker的答案。

所有必要的操作是将添加到配置download: true中,本地路径将由Papa Parse下载。 Philip M.的流式传输答案不是最佳答案。

var data;

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

P.S。我没有足够的声誉来评论Murat Seker的答案。因此,我重新发布了答案。任何对声誉的热爱将不胜感激。 :-)

答案 3 :(得分:-1)

您需要在配置中再添加一行:download: true,

var data;

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

更新:通过此答案,您不需要FILE对象。您可以传递文件名和papa解析将"下载"它