在 JavaScript (Node.js) 中处理 CSV:库、解析与数据生成

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

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

开始课程

在 JavaScript (Node.js) 中处理 CSV:完整指南



CSV(逗号分隔值)是交换表格数据最流行的格式之一。在 Node.js 生态系统中,有多个强大的库可用于解析、生成和处理 CSV 文件。在本文中,我们将介绍主要工具、它们的安装、使用示例和最佳实践。



Node.js 中用于处理 CSV 的流行库



在 JavaScript (Node.js) 中,最常用于处理 CSV 的三个库是:



  • csv-parser — 一个快速的流式解析器,以 streaming 模式工作
  • csv-stringify — 从 JavaScript 对象或数组生成 CSV 的生成器
  • fast-csv — 一个通用库,结合了解析和生成功能


安装库



使用 npm 安装所需的包:



npm install csv-parser csv-stringify fast-csv


使用 csv-parser 解析 CSV



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[0]); });


默认情况下,csv-parser 将文件的第一行用作标题,并返回具有相应键的对象。



使用 csv-stringify 生成 CSV



csv-stringify 库允许从 JavaScript 数组或对象创建 CSV 字符串。



示例:从对象创建 CSV



const { stringify } = require('csv-stringify');const fs = require('fs');

const data = [ { name: '伊万', age: 25, city: '莫斯科' }, { name: '玛丽亚', age: 30, city: '圣彼得堡' }, { name: '阿列克谢', age: 28, city: '喀山' }];

const writableStream = fs.createWriteStream('output.csv');

const stringifier = stringify({ header: true, columns: ['name', 'age', 'city']});

stringifier.pipe(writableStream);data.forEach(row => stringifier.write(row));stringifier.end();


通用解决方案:fast-csv



fast-csv 提供了解析和生成 CSV 的功能,并支持各种格式(TSV、自定义分隔符)。



示例:使用 fast-csv 解析 CSV



const fs = require('fs');const csv = require('@fast-csv/parse');

const rows = [];

fs.createReadStream('data.csv') .pipe(csv.parse({ headers: true })) .on('error', error => console.error(error)) .on('data', row => rows.push(row)) .on('end', (rowCount) => { console.log(`已处理 ${rowCount} 行`); console.log('数据:', rows); });


示例:使用 fast-csv 写入 CSV



const fs = require('fs');const csv = require('@fast-csv/format');

const data = [ ['姓名', '年龄', '城市'], ['伊万', '25', '莫斯科'], ['玛丽亚', '30', '圣彼得堡']];

const ws = fs.createWriteStream('output.csv');csv.write(data, { headers: true }).pipe(ws);


处理大文件与性能



当处理超过 100 MB 的 CSV 文件时,建议使用流式处理。所有三个讨论的库都支持流。



示例:逐行处理大 CSV 文件



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

let rowCount = 0;

fs.createReadStream('large-file.csv') .pipe(csv()) .on('data', (row) => { rowC

推荐