本篇介绍关于表格CSV文件的操作:解析读取以及保存存储。关于载入第3方模块,先安装,不会安装包的,请参考之前编写的关于包管理文章。
测试代码如下:
/**
* csv表格文件操作
* 序列化与反序列化
*/
//加载文件模块
const fs = require("fs");
//加载路径模块
const path = require("path");
//加载工具模块
const util = require("util");
//加载csv文件反序列化模块
const parse = require("csv-parse");
//加载csv文件序列化模块
const stringify = require("csv-stringify");
const { stringifier } = require("csv/.");
//加载对象转换框架
const transform = require("stream-transform");
//表格文件路径
var csvFilePath = path.join(__dirname,"teacher.csv");
//-------数据保存为csv文件---------
let data =[];
let stringifer = stringify.stringify({delimiter: ',',record_delimiter:'windows'});
stringifer.on("readable",function(){
let row;
while (row = stringifer.read()) {
data.push(row);
}
});
stringifer.on("error",function(err){
console.error(err.message);
});
stringifer.on("finish",function(){
fs.writeFile(csvFilePath,data,function(err){
if(err) throw err;
console.log("数据序列化转换保存为csv文件成功!");
//---csv文件数据解析读取--------
//【1】使用流读取解析csv文件
let outPut = [];
let parser = parse.parse({delimiter: ','});
parser.on("readable",()=>{
let row;
while (row = parser.read()) {
outPut.push(row);
}
});
parser.on("error",(err)=>{
console.error(err.message);
});
parser.on("end",()=>{
console.log("【1】CSV文件读取解析成功,内容:",util.inspect(outPut,{showHidden:true,depth:null}));
});
fs.createReadStream(csvFilePath).pipe(parser);
//【2】使用回调读取解析csv文件
fs.readFile(csvFilePath,(err,data)=>{
if(err) throw err;
parse.parse(data,{delimiter: ','},(err1,output)=>{
if(err1) throw err1;
console.log("【2】CSV文件读取解析成功,内容:",util.inspect(output,{showHidden:true,depth:null}));
});
});
//【3】使用流和回调API读取解析csv文件
let parser2 = parse.parse({delimiter: ','},(err,output)=>{
if(err) throw err;
console.log("【3】CSV文件读取解析成功,内容:",util.inspect(output,{showHidden:true,depth:null}));
});
fs.createReadStream(csvFilePath).pipe(parser2);
//【4】使用对象转换框架stream-transform读取解析csv文件
let output2 = [];
let transformer = transform.transform(function(data){
data.push(data.shift());
return data;
});
transformer.on("readable",function(){
let row;
while (row = transformer.read()) {
output2.push(row);
}
});
transformer.on("error",function(err){
if(err) throw err;
console.error(err.message);
});
transformer.on("finish",function(){
console.log("【4】CSV文件读取解析成功,内容:",util.inspect(output2,{showHidden:true,depth:null}));
});
fs.createReadStream(csvFilePath).pipe(parse.parse({delimiter: ','})).pipe(transformer);
});
});
stringifer.write(["Tom",18]);
stringifer.write(["Jhon",15]);
stringifer.write(["Zone",19]);
stringifer.end();
运行结果如下: