如何使用 Papa Parse 读取本地文件?
How can I read a local file with Papa Parse?
如何使用 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 文件作为文件打开时遇到了问题。我怎样才能用 javascript 做到这一点?
您需要在配置中再添加一行:download: true,
.
var data;
Papa.parse('../challanges.csv', {
header: true,
download: true,
dynamicTyping: true,
complete: function(results) {
console.log(results);
data = results.data;
}
});
更新:有了这个答案,您就不需要 FILE 对象了。您可以传递文件名,爸爸解析 "download" 它。
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.');
}
});
可能有一个更简单的界面,但到目前为止效果很好,并提供流式处理大文件的选项。
这是为了重申最佳答案是 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 的回答。所以,我重新发布了一个答案。任何对声誉的热爱都会受到赞赏。 :-)
None 其中对我有用,我特别想在 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()
如果你不想要 promise / async, await 那么你可以使用这个。
回调
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
是配置中的一个选项,其他选项请参阅文档
这是我的解决方案:
1: FE: Angular 10、NPM 安装 ngx-papaparse
然后在组件中导入
import { Papa } from "ngx-papaparse";
2: 一个类型文件的输入只接受 FE 上的 csv 文件
<input type="file" id="csv-file" accept=".csv" (change)="onFileSelected($event)">
3:一键读取CSV文件
4:我们从onFileSelected函数中获取文件数据
const files = event.target.files;
if (files.length === 0)
return;
this.selectedFile = files[0] as File;
5:调用读取CSV文件功能
this.papa.parse(this.selectedFile, {
delimiter: ",",
newline: "",
header: true,
dynamicTyping: true,
complete: (result) => {
this.fileData= result.data;
}
});
6:你应该得到 object 文件数据
提示:查看 papaparse 文档以查看您需要什么配置。
https://www.papaparse.com/
例如:header: true --> 表示您将在结果 object
中得到 header
如何使用 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 文件作为文件打开时遇到了问题。我怎样才能用 javascript 做到这一点?
您需要在配置中再添加一行:download: true,
.
var data;
Papa.parse('../challanges.csv', {
header: true,
download: true,
dynamicTyping: true,
complete: function(results) {
console.log(results);
data = results.data;
}
});
更新:有了这个答案,您就不需要 FILE 对象了。您可以传递文件名,爸爸解析 "download" 它。
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.');
}
});
可能有一个更简单的界面,但到目前为止效果很好,并提供流式处理大文件的选项。
这是为了重申最佳答案是 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 的回答。所以,我重新发布了一个答案。任何对声誉的热爱都会受到赞赏。 :-)
None 其中对我有用,我特别想在 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()
如果你不想要 promise / async, await 那么你可以使用这个。
回调
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
是配置中的一个选项,其他选项请参阅文档
这是我的解决方案: 1: FE: Angular 10、NPM 安装 ngx-papaparse 然后在组件中导入
import { Papa } from "ngx-papaparse";
2: 一个类型文件的输入只接受 FE 上的 csv 文件
<input type="file" id="csv-file" accept=".csv" (change)="onFileSelected($event)">
3:一键读取CSV文件
4:我们从onFileSelected函数中获取文件数据
const files = event.target.files;
if (files.length === 0)
return;
this.selectedFile = files[0] as File;
5:调用读取CSV文件功能
this.papa.parse(this.selectedFile, {
delimiter: ",",
newline: "",
header: true,
dynamicTyping: true,
complete: (result) => {
this.fileData= result.data;
}
});
6:你应该得到 object 文件数据 提示:查看 papaparse 文档以查看您需要什么配置。 https://www.papaparse.com/ 例如:header: true --> 表示您将在结果 object
中得到 header