在 JavaScript (Node.js) 中处理 CSV:库与工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 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

推荐