【问题标题】:How to read data columnwise from csv file in nodejs?如何从nodejs中的csv文件中逐列读取数据?
【发布时间】:2019-06-01 14:40:24
【问题描述】:

我已使用“fast-csv”模块来解析 csv 文件以进行其他操作,但这会按行返回数据。我想读取 csv 文件的前 2 列。有人可以帮忙吗?

【问题讨论】:

    标签: javascript node.js csv fs


    【解决方案1】:

    我看到了两个选项。

    一个是在fast-csv 中指定您想要的标题并丢弃其余的。这种方法将返回一个可能适合您需要的对象,或者您可以在之后将其转换为数组。

    const csv = require('fast-csv')
    
    const CSV_STRING = 'a,b,c\n' +
                         'a1,b1,c1\n' +
                         'a2,b2,c2\n'
    
    let filtered = []
    csv
      .fromString(CSV_STRING, { headers: ['column_1', 'column_2'], renameHeaders: true, discardUnmappedColumns: true }) // I give arbitrary names to the first two columns - use whatever make sense
      // .fromString(CSV_STRING, { headers: ['column_1', undefined, 'column_3'], discardUnmappedColumns: true }) // I could use undefined if I wanted to say skip column 2 and just want 1 and 3
      .on('data', function (data) {
        // console.log([data.column_1, data.column_2])
        filtered.push([data.column_1, data.column_2]) // or you can push to an array
      })
      .on('end', function () {
        console.log('done')
        console.log(filtered)
      })
    

    另一种是作为数组返回(默认)并使用transform方法过滤你需要的东西

    const csv = require('fast-csv')
    
    const CSV_STRING = 'a,b,c\n' +
                         'a1,b1,c1\n' +
                         'a2,b2,c2\n'
    
    csv
      .fromString(CSV_STRING)
      .transform(function (data) {
        return [data[0], data[1]]
      })
      .on('data', function (data) {
        console.log(data)
      })
      .on('end', function () {
        console.log('done')
      })
    

    【讨论】:

    • 感谢我使用了第二个选项,效果很好!
    • 如何跳过第一行(标题)?
    • @Ann 我已将第一个示例更新为 1)删除第一行和 2)推送到数组
    • 谢谢。这样可行!但我不明白它为什么以及如何工作。当我设置 header: true 时它不起作用。你能给我解释一下这里发生了什么吗?
    • 您应该能够使用 headers:true 但在这种情况下,您的字段将具有不同的名称(实际标题的名称而不是我创建的名为 'column_1' 和 'column_2'' . 在on 回调中检查您的数据以查看它的外观。同时删除renameHeaders: true 选项。
    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2013-01-13
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多