在 JavaScript (Node.js) 中处理 CSV:库与实用示例
CSV(逗号分隔值)是交换表格数据最常用的格式之一。在 Node.js 生态系统中,有多个成熟的库可以高效地读取、处理和创建 CSV 文件。本文将介绍主要工具、它们的功能,并提供实用的代码示例。
处理 CSV 的流行库
1. csv-parser — 快速流式解析器
该库是 Node.js 中读取 CSV 的标准工具。它以流模式工作,可以处理任意大小的文件而无需将其完全加载到内存中。
安装:
npm install csv-parser读取 CSV 文件示例:
const fs = require('fs');const csv = require('csv-parser');
const results = [];
fs.createReadStream('data.csv') .pipe(csv()) .on('data', (row) => { results.push(row); }) .on('end', () => { console.log('CSV 已成功读取'); console.log(results.slice(0, 3)); // 前 3 条记录 });主要特点:
- 支持自定义分隔符(默认为逗号)
- 自动从第一行检测表头
- 可跳过空行
- 流式处理,内存占用低
2. csv-stringify — 从对象生成 CSV
该工具是 csv 系列的一部分,用于从 JavaScript 对象生成 CSV 字符串或流。
安装:
npm install csv-stringify将数据写入 CSV 示例:
const { stringify } = require('csv-stringify');const fs = require('fs');
const data = [ { name: '安娜', age: 28, city: '莫斯科' }, { name: '伊万', age: 35, city: '圣彼得堡' }, { name: '奥尔加', age: 22, city: '喀山' }];
const writableStream = fs.createWriteStream('output.csv');const stringifier = stringify({ header: true });
stringifier.pipe(writableStream);data.forEach(row => stringifier.write(row));stringifier.end();
console.log('文件 output.csv 已创建');功能:
- 自动转义特殊字符(引号、逗号)
- 可配置列分隔符
- 支持自定义表头
- 支持同步和异步模式
3. csv-writer — 简单直观的 API
该库提供了更简单的 CSV 写入接口,尤其适合处理少量数据。
安装:
npm install csv-writer写入示例:
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({ path: 'users.csv', header: [ { id: 'id', title: 'ID' }, { id: 'name', title: '姓名' }, { id: 'email', title: '电子邮件' } ]});
const records = [ { id: 1, name: '阿列克谢', email: 'alex@example.com' }, { id: 2, name: '玛丽亚', email: 'maria@example.com' }];
csvWriter.writeRecords(records) .then(() => console.log('CSV 文件已创建'));高级使用场景
处理大文件并实时转换数据
将读取和写入结合在一个流中,以实时处理数据:
const fs = require('fs');const csv = require('csv-parser');const { stringify } = require('csv-stringify');
const readStream = fs.createReadStream('input.csv');const writeStream = fs.createWriteStream('output_transformed.csv');const stringifier = stringify({ h