如何使用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做到这一点?
答案 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解析将"下载"它