Работа с CSV в Node.js: библиотеки csv-parser и csv-writer

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с 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 успешно конвер                    

Рекомендаций