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)
可能有一个更简单的界面,但是到目前为止,它工作得很好,并提供了处理大型文件的流传输选项。
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是配置上的一个选项,其他选项请参见文档
您需要在配置中再添加一行: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 将“下载”它。