在Node.js中写入CSV

时间:2012-04-19 11:32:53

标签: javascript node.js csv

我正在努力寻找在Node.js中将数据写入CSV 的方法。

有几个CSV插件可用,但它们只能“写入”stdout。

理想情况下,我想使用循环以逐行为基础进行编写。

7 个答案:

答案 0 :(得分:29)

您可以使用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!');
  }
});

答案 1 :(得分:23)

node-csv-parsernpm install csv)的文档明确指出它可以与流一起使用(请参阅fromStreamtoStream)。所以使用stdout并没有硬编码。

当您npm search csv时,还会出现其他几个CSV解析器 - 您可能也想查看它们。

答案 2 :(得分:8)

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

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.');
  });
});

答案 3 :(得分:2)

如果您想使用循环,可以使用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)
})

答案 4 :(得分:1)

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

Broadcasting Power value

答案 5 :(得分:1)

**如果您不想使用除 fs 之外的任何库,您可以手动进行。此外,您可以在要写入 CSV 文件时过滤数据 **

router.get('/apiname', (req, res) => {
 const data = arrayOfObject; // you will get from somewhere
 /*
    // Modify old data (New Key Names)
    let modifiedData = data.map(({ oldKey1: newKey1, oldKey2: newKey2, ...rest }) => ({ newKey1, newKey2, ...rest }));
 */
 const path = './test'
 writeToFile(path, data, (result) => {
     // get the result from callback and process
     console.log(result) // success or error
   });
});

writeToFile = (path, data, callback) => {
    fs.writeFile(path, JSON.stringify(data, null, 2), (err) => { // JSON.stringify(data, null, 2) help you to write the data line by line
            if (!err) {
                callback('success');
                // successfull
            }
            else {
                 callback('error');
               // some error (catch this error)
            }
        });
}

答案 6 :(得分:0)

对于喜欢fast-scv的人:

const { writeToPath } = require('@fast-csv/format');

const path = `${__dirname}/people.csv`;
const data = [{name: 'Stevie', id: 10}, {name: 'Ray', id: 20}];
const options = { headers: true, quoteColumns: true };

writeToPath(path, data, options)
        .on('error', err => console.error(err))
        .on('finish', () => console.log('Done writing.'));