You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js + fast-csv:如何修改现有CSV文件而非覆盖?

用fast-csv处理CSV的删除、修改、追加操作

嗨,作为刚接触Node.js和fast-csv的新手,我完全理解你的困惑——CSV本质是纯文本文件,并没有直接“修改”文件的API,常规做法是先把文件内容读取到内存的数组中,在数组里完成增删改操作,最后再把修改后的数组写回原文件。下面我就一步步带你实现这三个需求:

首先,确保你已经安装了fast-csv:

npm install fast-csv

假设你的CSV文件名为products.csv,内容如下(我把你示例里的|换成了标准的逗号分隔,如果你确实用|当分隔符,后面代码里要加delimiter: '|'选项):

id,minQty
p1,10
p2,20
p3,30
p4,40
p5,50

1. 追加一条新记录

比如我们要追加一条id: p6, minQty: 60的记录:

const fs = require('fs');
const csv = require('fast-csv');

// 1. 读取现有CSV数据
const readStream = fs.createReadStream('products.csv');
const records = [];

csv.parseStream(readStream, { headers: true })
  .on('data', (data) => records.push(data))
  .on('end', () => {
    // 2. 追加新记录
    records.push({ id: 'p6', minQty: '60' }); // 注意数值可以是字符串,fast-csv会自动处理

    // 3. 把修改后的数组写回文件
    const writeStream = fs.createWriteStream('products.csv');
    csv.write(records, { headers: true })
      .pipe(writeStream)
      .on('finish', () => console.log('新记录追加完成!'));
  });

2. 修改某条记录的minQty值

比如我们要把id: p3的minQty改成35:

const fs = require('fs');
const csv = require('fast-csv');

const readStream = fs.createReadStream('products.csv');
const records = [];

csv.parseStream(readStream, { headers: true })
  .on('data', (data) => records.push(data))
  .on('end', () => {
    // 找到目标记录并修改
    const targetRecord = records.find(item => item.id === 'p3');
    if (targetRecord) {
      targetRecord.minQty = '35'; // 这里可以用数字,但写入时会转成字符串,所以直接写字符串也没问题
    }

    // 写回文件
    const writeStream = fs.createWriteStream('products.csv');
    csv.write(records, { headers: true })
      .pipe(writeStream)
      .on('finish', () => console.log('记录修改完成!'));
  });

3. 删除一条记录

比如我们要删除id: p2的记录:

const fs = require('fs');
const csv = require('fast-csv');

const readStream = fs.createReadStream('products.csv');
const records = [];

csv.parseStream(readStream, { headers: true })
  .on('data', (data) => records.push(data))
  .on('end', () => {
    // 过滤掉要删除的记录
    const updatedRecords = records.filter(item => item.id !== 'p2');

    // 写回文件
    const writeStream = fs.createWriteStream('products.csv');
    csv.write(updatedRecords, { headers: true })
      .pipe(writeStream)
      .on('finish', () => console.log('记录删除完成!'));
  });

额外提示

  • 如果你的CSV是用|分隔的,在调用csv.parseStream和csv.write的时候要加上delimiter: '|'选项,比如:
    csv.parseStream(readStream, { headers: true, delimiter: '|' })
    // 写入时也要加
    csv.write(records, { headers: true, delimiter: '|' })
    
  • 实际项目中建议加上错误处理,比如监听error事件:
    readStream.on('error', (err) => console.error('读取文件出错:', err));
    writeStream.on('error', (err) => console.error('写入文件出错:', err));
    

内容的提问来源于stack exchange,提问作者ngchongpeng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:47