Javascript 在Node.js中写入CSV
我正在努力找到一种方法,将数据写入Node.js中的CSV 有几个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
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.'));