Автор оригинала: Aniuchi Adaobi.
Вступление
Общее задание разработки – это чтение данных из файлов. Общий формат файла – это .csv формат.
Пока вы можете прочитать файлы CSV, используя ФС Модуль, который поставляется с узлом и получает содержимое файла, в большинстве случаев анализ и дальнейшее преобразование гораздо проще с помощью модулей, сделанных именно для этой цели.
Множество модулей обеспечивают такие возможности, такие как Neat-CSV или CSV-Parser пакеты. Однако в этой статье мы будем использовать Узел-CSV – набор пакетов CSV для генерации, анализа, преобразования и настраивания данных CSV.
Установка узла-CSV
Модуль состоит из CSV-Generate , CSV-Parse , CSV-преобразование и CSV-Stringify пакеты.
Вы можете установить весь набор, либо каждый пакет один за другим, если вам все они все. Давайте инициализируем проект узла с настройками по умолчанию:
$ npm init -y
Тогда давайте установим весь Узел-CSV Люкс:
$ npm install node-csv
Мы будем работать с файлом CSV с этим содержимым:
Account Name,Account Code,Type,Description Cash,101,Assets,Checking account balance Wages Payable,220,Liabilities,Amount owed to employes for hours not yet paid Rent expense,560,Expenses,Cost of occupied rented facilities during accounting period
Чтение файлов CSV с CSV-Parse
Чтобы прочитать файлы CSV, мы будем использовать CSV-Parse Пакет из Узел-CSV Отказ
CSV-Parse Пакет предоставляет несколько подходов для анализа файлов CSV – с использованием обратных вызовов, потока + обратный вызов, а также синхронизация и ASYNC API. Мы будем покрывать Поток + API обратного вызова и Sync API Отказ
Поток + API обратного вызова
Давайте создадим файл, называемый index.js и построить Парсер :
var fs = require('fs');
var parse = require('csv-parse');
var parser = parse({columns: true}, function (err, records) {
console.log(records);
});
fs.createReadStream(__dirname+'/chart-of-accounts.csv').pipe(parser);
Во-первых, мы импортируем собственную файловую систему модуля ( FS ) и CSV-Parse модуль. Тогда мы создаем Парсер который принимает объектный литерал, содержащий варианты, которые мы хотели бы установить. Второй аргумент – это функция обратного вызова, которая используется для доступа к записям – или просто распечатать их в нашем случае.
Варианты, которые мы можем установить, не являются обязательными. В большинстве случаев вы будете использовать любой из разделитель , литой или Колонны параметры:
Наконец, мы открыли поток чтения, используя ФС Модуль и начал трубы в парсере.
Давайте запустим этот файл:
$ node index.js
Это приводит к:
[
{
'Account Name': 'Cash',
'Account Code': '101',
Type: 'Assets',
Description: 'Checking account balance'
},
{
'Account Name': 'Wages Payable',
'Account Code': '220',
Type: 'Liabilities',
Description: 'Amount owed to employes for hours not yet paid'
},
{
'Account Name': 'Rent expense',
'Account Code': '560',
Type: 'Expenses',
Description: 'Cost of occupied rented facilities during accounting period'
}
]
Вместо того, чтобы просто печатать содержимое, вы можете манипулировать этими данными, строить объекты с информацией из этих полей или, например, сохранить их в базу данных.
Используя Sync API
Давайте повторим эту функциональность с помощью синхронизации API:
var fs = require('fs').promises;
var parse = require('csv-parse/lib/sync');
(async function () {
const fileContent = await fs.readFile(__dirname+'/chart-of-accounts.csv');
const records = parse(fileContent, {columns: true});
console.log(records)
})();
Опять же, мы импортируем ФС Модуль и синхронизация API из CSV-Parse модуль.
Тогда мы создаем async Функция, в которой мы извлекаем содержимое файла по ждать Отклика от readfile () функция.
Тогда мы можем создать Парсер который принимает содержимое файла в качестве первого аргумента и литерала объекта в качестве второго. Этот литерал объекта содержит варианты создания парсера (мы установили столбцы на True ). Этот парсер присваивается постоянной переменной, и мы просто распечатываем его содержимое ради краткости:
[
{
'Account Name': 'Cash',
'Account Code': '101',
Type: 'Assets',
Description: 'Checking account balance'
},
{
'Account Name': 'Wages Payable',
'Account Code': '220',
Type: 'Liabilities',
Description: 'Amount owed to employes for hours not yet paid'
},
{
'Account Name': 'Rent expense',
'Account Code': '560',
Type: 'Expenses',
Description: 'Cost of occupied rented facilities during accounting period'
}
]
Написание файлов CSV с помощью CSV Stringify
Похоже на чтение, мы бы иногда нравились Написать данные в формате CSV. Для этого мы будем использовать CSV-Stringify Пакет из Узел-CSV Люкс. Строгование Просто означает, что мы преобразуем некоторые данные (JSON в нашем примере) в строку. Эта строка затем записывается в файл в формате CSV.
Предположим, у вас есть какие-нибудь содержание JSON, которое вы хотели бы записать как файл CSV:
var someData = [
{
"Country": "Nigeria",
"Population": "200m",
"Continent": "Africa",
"Official Language(s)": "English"
},
{
"Country": "India",
"Population": "1b",
"Continent": "Asia",
"Official Language(s)": "Hindi, English"
},
{
"Country": "United States of America",
"Population": "328m",
"Continent": "North America",
"Official Language": "English"
},
{
"Country": "United Kingdom",
"Population": "66m",
"Continent": "Europe",
"Official Language": "English"
},
{
"Country": "Brazil",
"Population": "209m",
"Continent": "South America",
"Official Language": "Portugese"
}
]
CSV-Stringify Упаковка также имеет пару API-вариантов, однако, API обратного вызова предлагает действительно простой способ сократить данные, без необходимости обрабатывать такие события, как с API по потоку.
Давайте пойдем вперед и затрагиваем данные выше, прежде чем писать его в файл:
var fs = require('fs');
var stringify = require('csv-stringify');
stringify(someData, {
header: true
}, function (err, output) {
fs.writeFile(__dirname+'/someData.csv', output);
})
Здесь мы импортируем ФС и CSV-Stringify модули. Затем, используя Stringify () Функция, мы поставляем данные, которые мы хотели бы преобразовать в строку. Мы также поставили объектный литерал, содержащий Заголовок вариант. Наконец, есть также функция обратного вызова, которая используется для записи содержимого в файл.
Другие варианты, такие как литой , Колонны и разделитель также доступны. В нашем случае мы устанавливаем Заголовок Вариант для правда Чтобы сказать «Строки», чтобы создать имена столбцов в первой записи.
Запуск этого кода генерирует файл с правильным содержимым:
Заключение
Узел-CSV Модуль – это набор меньших модулей, используемых для чтения/анализа, преобразования и записи данных CSV и файлам.
Мы использовали CSV-Parse Модуль для чтения файлов CSV и CSV-Stringify Модуль для уничтожения данных перед записью его в файл с помощью Node.js.