Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Node.js中写入CSV_Javascript_Node.js_Csv - Fatal编程技术网

Javascript 在Node.js中写入CSV

Javascript 在Node.js中写入CSV,javascript,node.js,csv,Javascript,Node.js,Csv,我正在努力找到一种方法,将数据写入Node.js中的CSV 有几个CSV插件可用,但它们只“写”到标准输出 理想情况下,我希望使用循环在逐行的基础上编写。文件(npm install csv)特别声明它可以与流一起使用(请参见fromStream,toStream)。所以使用标准输出不是硬编码的 当您使用npm搜索CSV时,还会出现其他几个CSV解析器,您可能也想查看它们。您可以使用fs(): 下面是一个简单的示例,用于使用fs.writeFile将适合内存的数据集写入csv文件 import

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

有几个CSV插件可用,但它们只“写”到标准输出

理想情况下,我希望使用循环在逐行的基础上编写。

文件(
npm install csv
)特别声明它可以与流一起使用(请参见
fromStream
toStream
)。所以使用标准输出不是硬编码的

当您使用npm搜索CSV时,还会出现其他几个CSV解析器,您可能也想查看它们。

您可以使用fs():


下面是一个简单的示例,用于使用
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.');
  });
});
从“csv stringify”导入stringify;
从“fs”导入fs;
让数据=[];
让列={
id:'id',
姓名:“姓名”
};
对于(变量i=0;i<10;i++){
数据推送([i,'名称'+i]);
}
stringify(数据,{header:true,columns:columns},(err,output)=>{
如果(错误)抛出错误;
fs.writeFile('my.csv',输出,(err)=>{
如果(错误)抛出错误;
log('my.csv已保存');
});
});

如果您想像您所说的那样使用循环,可以使用节点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)
})

如果您不想使用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')
对于那些喜欢:


“然而,他们只‘写’给stdout”,这似乎真的令人惊讶。他们不会写入任何可写的
,它必须是
stdout
?!您是否可以包含到您测试过的模块的链接,以便其他人可以查看这些模块和/或知道建议哪些备选模块?有一个关于使用nodejs生成CSV的教程。与John的解决方案相比,这里有什么优势?确保写入的是
string
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')
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.'));