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

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

我的问题:

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

var 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 = 'AIzaSyButrP5ZsbtQYOoM_Fd55QPceAXjUKMqg8'; distance.apiKey = 'AIzaSyCgOnxMh3tg20zFpMf00FSNdexm64oxS_4'; 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"); }); 

在上面的程序中,我使用filecsv file1.csv,从我拿两栏SourceLatLongDestLatLong ,我计算以英里为单位的距离。 现在我需要将新的里程列添加到我的文件.csv

       

网上收集的解决方案 "如何使用节点js将新列添加到csv文件"

使用csv-parser包而不是fast-csv,而json2csv用于json到csv的parsing。

你想要做的就是使用csvparsing器将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文件中。