Работа с CSV в Node.js: библиотеки csv-parser и csv-writer
CSV (Comma-Separated Values) — один из самых популярных форматов для хранения и обмена табличными данными. В экосистеме Node.js существует множество инструментов для работы с этим форматом. В этой статье мы рассмотрим две наиболее удобные и легковесные библиотеки: csv-parser для чтения и csv-writer для записи CSV-файлов.
Установка библиотек
Для начала работы установите обе библиотеки через npm:
npm install csv-parser csv-writer
Чтение CSV-файлов с csv-parser
Библиотека 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-файлов с csv-writer
Библиотека 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', title: 'Товар' },
{ id: 'price', title: 'Цена' },
{ id: 'quantity', title: 'Количество' }
]
});
// Запись данных
csvWriter.writeRecords(jsonData)
.then(() => {
console.log('JSON успешно конвер Также в библиотеке
Логирование в Go: Обзор стандартной библиотеки log и альтернатив
Работа с XML в Go (Golang): пакет encoding/xml и альтернативы
Парсинг HTML в Swift (iOS/macOS): библиотека SwiftSoup
JWT токены в Kotlin: Полное руководство с примерами кода