Node.js关于CSV文件的操作

本篇介绍关于表格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();







运行结果如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值