Работа с CSV в JavaScript (Node.js): библиотеки и инструменты

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

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

Начать курс

Работа с CSV в JavaScript (Node.js): библиотеки и практические примеры

CSV (Comma-Separated Values) — один из самых распространённых форматов для обмена табличными данными. В экосистеме Node.js существует несколько зрелых библиотек, которые позволяют эффективно читать, обрабатывать и создавать CSV-файлы. В этой статье мы рассмотрим основные инструменты, их возможности и приведём практические примеры кода.

Популярные библиотеки для работы с CSV

1. csv-parser — быстрый потоковый парсер

Эта библиотека является стандартом для чтения CSV в Node.js. Она работает в режиме потока (stream), что позволяет обрабатывать файлы любого размера без загрузки их целиком в память.

Установка:

npm install 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.slice(0, 3)); // Первые 3 записи
  });

Ключевые особенности:

  • Поддержка пользовательских разделителей (по умолчанию запятая)
  • Автоматическое определение заголовков из первой строки
  • Возможность пропускать пустые строки
  • Низкое потребление памяти благодаря потоковой обработке

2. csv-stringify — создание CSV из объектов

Этот инструмент является частью семейства csv и предназначен для генерации CSV-строк или потоков из JavaScript-объектов.

Установка:

npm install csv-stringify

Пример записи данных в CSV:

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

const data = [
  { name: 'Анна', age: 28, city: 'Москва' },
  { name: 'Иван', age: 35, city: 'Санкт-Петербург' },
  { name: 'Ольга', age: 22, city: 'Казань' }
];

const writableStream = fs.createWriteStream('output.csv');
const stringifier = stringify({ header: true });

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

console.log('Файл output.csv создан');

Возможности:

  • Автоматическая экранировка специальных символов (кавычки, запятые)
  • Настройка разделителя колонок
  • Поддержка пользовательских заголовков
  • Работа в синхронном и асинхронном режимах

3. csv-writer — простой и интуитивный API

Эта библиотека предлагает более простой интерфейс для записи CSV, особенно если вы работаете с небольшими объёмами данных.

Установка:

npm install csv-writer

Пример записи:

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

const csvWriter = createCsvWriter({
  path: 'users.csv',
  header: [
    { id: 'id', title: 'ID' },
    { id: 'name', title: 'Имя' },
    { id: 'email', title: 'Email' }
  ]
});

const records = [
  { id: 1, name: 'Алексей', email: 'alex@example.com' },
  { id: 2, name: 'Мария', email: 'maria@example.com' }
];

csvWriter.writeRecords(records)
  .then(() => console.log('CSV файл создан'));

Продвинутые сценарии использования

Обработка больших файлов с трансформацией данных

Объединим чтение и запись в одном потоке для обработки данных на лету:

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

const readStream = fs.createReadStream('input.csv');
const writeStream = fs.createWriteStream('output_transformed.csv');
const stringifier = stringify({ header: true });

readStream
  .pipe(csv())
  .on('data', (row) => {
    // Пример трансформации: добавляем поле
    row.fullName = `${row.firstName} ${row.lastName}`.toUpperCase();
    stringifier.write(row);
  })
  .on('end', () => {
    stringifier.end();
    stringifier.pipe(writeStream);
    console.log('Трансформация завершена');
  });

Работа с нестандартными разделителями

Если ваш CSV использует табуляцию или точку с запятой:

<                    

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