Как использовать чтение и запись потока csv-parse
Привет , ребята, я новичок здесь и получил путаницу, как я могу использовать readstream и поток записи прямо сейчас, я попробовал это (я использую эту библиотеку https://www.npmjs.com/package/csv-parse)
fs.createReadStream(path.join(__dirname,"../demofile/Customers.csv"))
.pipe(parse(options))
.on('data', function(csvrow) {
console.log(csvrow);
//do something with csvrow
output.push(csvrow);
})
.on('end',function() {
//do something wiht csvData
console.log(csvData);
});
но я не думаю, что это правильный способ чтения и записи потока csv-parse, может кто-нибудь подсказать мне, как я могу использовать чтение и запись с приведенным выше кодом. в основном я хочу прочитать CSV-файл и записать его в другой CSV-файл причина использования чтения и записи потока, потому что мой размер файла составляет около 2 ГБ
1 ответ
Следующий код использует потоки для добавления нового столбца. Файл, который я использовал, занимал около 500 МБ, а максимальный объем используемой оперативной памяти - менее 50 МБ. Обратите внимание, что вместо csv-parse
Я импортировал csv
который на самом деле является модулем "зонтик", который включает в себя csv-parse
, csv-generate
, stream-transform
а также csv-stringify
,
const fs = require('fs');
const csv = require('csv');
const path = require('path');
const EOL = require('os').EOL;
FILE = path.join(__dirname, 'IN.csv');
NEW_FILE = path.join(__dirname, 'OUT.csv');
const readStream = fs.createReadStream(FILE);
const writeStream = fs.createWriteStream(NEW_FILE);
const parse = csv.parse();
const transform = csv.transform((row, cb) => {
row.push('NEW_COL');
result = row.join(',') + EOL;
cb(null, result);
});
readStream.pipe(parse).pipe(transform).pipe(writeStream);