как использовать чтение и запись потока csv-parse - PullRequest
0 голосов
/ 04 января 2019

Привет, ребята, я новичок здесь и запутался, как я могу использовать readstream и write stream прямо сейчас, я попробовал это (я использую эту библиотеку 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 Ответ

0 голосов
/ 04 января 2019

Следующий код использует потоки для добавления нового столбца.Файл, который я использовал, занимал около 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);
...