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

ada*_*amb 7 javascript csv node.js 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;
  }
});
Run Code Online (Sandbox Code Playgroud)

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

小智 12

Filepapaparse的文档建议的API供浏览器使用。假设您正在服务器端的节点上运行此代码,那么对我有用的就是利用可读流

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.'); 
    }
});
Run Code Online (Sandbox Code Playgroud)

可能有一个更简单的界面,但是到目前为止,它工作得很好,并提供了处理大型文件的流传输选项。

  • 这是一个漂亮的包!它对我来说效果很好,只需在前端使用 React 加载 csv。 (2认同)

Gle*_*son 12

这些都不适合我,我特别想在 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()
Run Code Online (Sandbox Code Playgroud)

如果你不想要承诺/异步,那么你可以使用它。

打回来

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.'); 
  }
});
Run Code Online (Sandbox Code Playgroud)

注意header: true是配置上的一个选项,其他选项请参见文档


Mur*_*ker 5

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

var data;

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

更新:有了这个答案,您就不需要 FILE 对象。您可以传递文件名,papa parse 将“下载”它。

  • 我尝试了你的建议,但得到了 `...\node_modules\papaparse\papaparse.js:591 ReferenceError: XMLHttpRequest is not defined` 错误。我正在使用 Papa Parse v.4.5。 (2认同)