在 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