在Node.js中写入CSV

Phi*_*ley 38 javascript csv node.js

我正在努力找到一种方法将数据写入 Node.js中的CSV.

有几个CSV插件可用,但它们只能"写入"到stdout.

理想情况下,我想使用循环逐行写入.

Joh*_*ier 36

您可以使用fs(https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback):

var dataToWrite;
var fs = require('fs');

fs.writeFile('form-tracking/formList.csv', dataToWrite, 'utf8', function (err) {
  if (err) {
    console.log('Some error occured - file either not saved or corrupted file saved.');
  } else{
    console.log('It\'s saved!');
  }
});
Run Code Online (Sandbox Code Playgroud)


Joe*_*ite 26

node-csv-parser(npm install csv)的文档特别声明它可以与stream一起使用(参见fromStream,toStream).因此使用stdout并不是硬编码.

当你npm search csv想要查看它们时,还会出现其他几个CSV解析器.


cba*_*rri 13

这是一个简单的例子,使用csv-stringify将适合内存的数据集写入csv文件fs.writeFile.

import stringify from 'csv-stringify';
import fs from 'fs';

let data = [];
let columns = {
  id: 'id',
  name: 'Name'
};

for (var i = 0; i < 10; i++) {
  data.push([i, 'Name ' + i]);
}

stringify(data, { header: true, columns: columns }, (err, output) => {
  if (err) throw err;
  fs.writeFile('my.csv', output, (err) => {
    if (err) throw err;
    console.log('my.csv saved.');
  });
});
Run Code Online (Sandbox Code Playgroud)


小智 13

如果你想像你说的那样使用循环,你可以用 Node fs 做这样的事情:

let fs = require("fs")

let writeStream = fs.createWriteStream('/path/filename.csv')

someArrayOfObjects.forEach((someObject, index) => {     
    let newLine = []
    newLine.push(someObject.stringPropertyOne)
    newLine.push(someObject.stringPropertyTwo)
    ....

    writeStream.write(newLine.join(',')+ '\n', () => {
        // a line was written to stream
    })
})

writeStream.end()

writeStream.on('finish', () => {
    console.log('finish write stream, moving along')
}).on('error', (err) => {
    console.log(err)
})
Run Code Online (Sandbox Code Playgroud)


Gab*_*ges 7

如果您不想使用 fs 之外的任何库,您可以手动完成。

let fileString = ""
let separator = ","
let fileType = "csv"
let file = `fileExample.${fileType}`

Object.keys(jsonObject[0]).forEach(value=>fileString += `${value}${separator}`)
    fileString = fileString.slice(0, -1)
    fileString += "\n"

    jsonObject.forEach(transaction=>{
        Object.values(transaction).forEach(value=>fileString += `${value}${separator}`)
        fileString = fileString.slice(0, -1)
        fileString += "\n"
    })

fs.writeFileSync(file, fileString, 'utf8')
Run Code Online (Sandbox Code Playgroud)