在 Node.js 中处理 CSV:csv-parser 和 csv-writer 库

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

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

开始课程

在 Node.js 中处理 CSV:csv-parser 和 csv-writer 库



CSV(逗号分隔值)是存储和交换表格数据最流行的格式之一。在 Node.js 生态系统中,有许多用于处理此格式的工具。在本文中,我们将介绍两个最方便且轻量级的库:用于读取的 csv-parser 和用于写入 CSV 文件的 csv-writer。



安装库



首先,通过 npm 安装这两个库:



npm install csv-parser csv-writer


使用 csv-parser 读取 CSV 文件



csv-parser 库将 CSV 数据转换为 JavaScript 对象流。它基于 Node.js Streams 工作,这使得即使处理非常大的文件也能高效进行,而无需将整个文件加载到内存中。



基本读取示例



创建一个包含以下内容的 users.csv 文件:



name,age,city安娜,28,莫斯科伊万,35,圣彼得堡玛丽亚,22,喀山


现在使用 csv-parser 读取它:



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

const results = [];

fs.createReadStream('users.csv') .pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { console.log('读取记录数:', results.length); console.log('第一条记录:', results[0]); // 输出:{ name: '安娜', age: '28', city: '莫斯科' } });


配置分隔符和标题



csv-parser 支持各种设置。例如,如果您的 CSV 使用分号作为分隔符:



fs.createReadStream('users.csv')  .pipe(csv({ separator: ';' }))  .on('data', (row) => console.log(row));


如果文件中没有标题,可以手动指定:



fs.createReadStream('data.csv')  .pipe(csv({ headers: ['id', 'product', 'price'] }))  .on('data', (row) => console.log(row));


使用 csv-writer 写入 CSV 文件



csv-writer 库允许从对象数组创建 CSV 文件。它支持不同的编码和分隔符。



创建简单的 CSV 文件



const createCsvWriter = require('csv-writer').createObjectCsvWriter;

const csvWriter = createCsvWriter({ path: 'output.csv', header: [ { id: 'name', title: '姓名' }, { id: 'age', title: '年龄' }, { id: 'city', title: '城市' } ]});

const records = [ { name: '安娜', age: 28, city: '莫斯科' }, { name: '伊万', age: 35, city: '圣彼得堡' }, { name: '玛丽亚', age: 22, city: '喀山' }];

csvWriter.writeRecords(records) .then(() => console.log('CSV 文件创建成功'));


csv-writer 的额外设置



您可以更改字段分隔符、添加 BOM 以在 Excel 中正确显示西里尔字母,并指定编码:



const createCsvWriter = require('csv-writer').createObjectCsvWriter;

const csvWriter = createCsvWriter({ path: 'output_utf8.csv', header: [ { id: 'name', title: '姓名' }, { id: 'age', title: '年龄' } ], fieldDelimiter: ';', alwaysQuote: true, encoding: 'utf8'});


实际示例:将 JSON 转换为 CSV



经常需要将 JSON 数据转换为 CSV 格式。这是一个完整的示例:



const fs = require('fs');const createCsvWriter = require('csv-writer').createObjectCsvWriter;

// 原始数据const jsonData = [ { id: 1, product: '笔记本电脑', price: 75000, quantity: 10 }, { id: 2, product: '鼠标', price: 1500, quantity: 50 }, { id: 3, product: '键盘', price: 3500, quantity: 30 }];

// 配置 CSV 写入器const csvWriter = createCsvWriter({ path: 'products.csv', header: [ { id: 'id', title: 'ID' }, { id: 'product

推荐