在node.js中使用fast-csv根据列值将csv文件拆分为多个csv文件

时间:2019-01-13 23:40:49

标签: javascript node.js csv

我有一个这样的csv文件:

ID   Name   TNumber
123  John   123456
123  Joe    789012
124  Tim    896578
124  Tom    403796

我想根据ID列将其分为2个单独的csv文件。

我正在使用fast-csv来解析csv和其他修改。我需要将文件分成两个(在上述情况下),然后执行其他操作。我该如何实现?

1 个答案:

答案 0 :(得分:1)

这有效:

const fs = require('fs');
const fastCsv = require('fast-csv');

const datas = {}; // data['123'] = CSV data filtered for id = 123
const options = {headers: true, delimiters: '\t'}; // relative to your CSV usage

fastCsv
    .fromPath('./data.csv', options)
    .on('data', d => {
        if (!datas[d.id]) datas[d.id] = [];
        datas[d.id].push(d)
    })
    .on('end', () => {
        Object.keys(datas).forEach(id => {
            // For each ID, write a new CSV file
            fastCsv
                .write(datas[id], options)
                .pipe(fs.createWriteStream(`./data-id-${id}.csv`));
        })
    });

另外,这应该很快。