如何使用节点js向csv文件添加新列

时间:2016-10-21 09:24:29

标签: node.js csv

我已经尝试使用node.js npm包fast-csv,但我没有得到解决方案,我可以成功读取csv文件,现在我需要在现有的csv文件中添加一个新列。

我的问题:

如何向csv文件添加新列?如何更新csv?

overflow-wrap:break-word;

在上面的程序中,我使用了filecsv file1.csv,从i中取两列INSTALLED_APPSvar csv = require("fast-csv"); var fs = require('fs'); var stream = fs.createReadStream("file1.csv"); var service = 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=53.78943,-0.9985&destinations=53.540867,-0.510699&mode=driving&language=en-US'; var source = []; var dest = []; var distance = require('google-distance'); distance.apiKey = '************'; var i = 1; csv .fromStream(stream, { headers: true }) .on("data", function(data) { //get source and distance array source = data.SourceLatLong; dest = data.DestBREPLatLong; //print source and destinatoon console.log(source); console.log(dest); distance.get({ // index: i, origin: source, destination: dest, units: 'imperial' }, function(err, map_data) { if (err) return console.log(err); //console.log(map_data); //console miles of aff console.log('source lat long ' + ':' + data.SourceLatLong + ' , ' + 'Dest lat long' + ':' + data.DestBREPLatLong + ',' + ' distance ' + ':' + map_data.distance + ' ' + i++); }); }) .on("end", function() { console.log("done"); }); ,我计算距离(英里)。现在我需要将新的英里列添加到我的文件.csv

1 个答案:

答案 0 :(得分:4)

使用csv-parser包而不是fast-csv,使用json2csv进行json到csv解析。

你想要做的是使用csv-parser将csv的每一行转换为json,在生成的json对象中添加一个新字段,为每一行执行此操作,将结果放入数组,将该数组转换为带有json2csv包的csv。

以下是代码:

var csv = require('csv-parser');
var fs = require('fs');
var json2csv = require('json2csv');
var dataArray = [];

fs.createReadStream('your-original-csv-file.csv')
  .pipe(csv())
  .on('data', function (data) {
    data.newColumn = newColumnValue;
    dataArray.push(data);
  })
  .on('end', function(){
    var result = json2csv({ data: dataArray, fields: Object.keys(dataArray[0]) });
    fs.writeFileSync(fileName, result);
  });

fs.writeFileSync无论如何都会覆盖原始文件,因此您也可以保存到原始的csv文件中。