【发布时间】:2019-06-01 14:40:24
【问题描述】:
我已使用“fast-csv”模块来解析 csv 文件以进行其他操作,但这会按行返回数据。我想读取 csv 文件的前 2 列。有人可以帮忙吗?
【问题讨论】:
标签: javascript node.js csv fs
我已使用“fast-csv”模块来解析 csv 文件以进行其他操作,但这会按行返回数据。我想读取 csv 文件的前 2 列。有人可以帮忙吗?
【问题讨论】:
标签: javascript node.js csv fs
我看到了两个选项。
一个是在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')
})
【讨论】:
on 回调中检查您的数据以查看它的外观。同时删除renameHeaders: true 选项。