在Node.js中使用fast-csv包读取和写入CSV
我正在尝试编写一个简单的节点程序,它读取一个csv文件,提取一列(比如说第二个)并将其写入另一个CSV文件。 我正在读取内容到一个数组,然后将该数组写入文件。
阶段和数据在每一步
input文件
123,456,789,abc def,ghi,232,jkl
排列
['456','ghi']
输出文件
4,5,6 g,h,i
输出需要
456 ghi
我只是错过了一个configuration,或者是我写数据错误的方式? END块中写入文件的代码块是否不正确?
这是我的代码
var fast_csv = require('fast-csv'); var tempArray=new Array(); console.log("START"); fast_csv.fromPath("inputfile.txt").on("data", function(data){ tempArray.push(data[1]); }) .on("end", function(){ tempArray.sort(); console.log(tempArray); fast_csv.writeToPath("outputfile.csv", tempArray) .on("finish", function(){ console.log("END"); }); });
它将数组中的每个元素视为一个数组,所以'456'被视为一个具有元素4,5,6的数组。
我做的一个奇怪的解决方法是循环访问数组,并将每个元素放在自己的数组中,所以它会是:
var newArray = []; for( var i = 0; i < tempArray.length; i++){ var arr = []; arr.push(tempArray[i]); newArray.push(arr); }
然后写下“newArray”。
但除此之外,如果您逐行写入,则可以将每个元素放在括号内,如:
var fast_csv = fastcsv.createWriteStream(); var writeStream = fs.createWriteStream("outputfile.csv"); fast_csv.pipe(writeStream); for(var i = 0; i < tempArray.length; i++){ fast_csv.write( [ tempArray[i] ] ); //each element inside bracket } fast_csv.end();
更改: tempArray.push(data[1]);
到: tempArray.push([data[1]]);
writeToPath
接受一个数组的数组。
文档: https : //www.npmjs.com/package/fast-csv