附加到 nodejs 中的 csv 文件(使用 csv-write-stream)
Append to a csv file in nodejs (using csv-write-stream)
我目前正在使用 csv-write-stream 将内容写入 csv 文件:
var fs = require('fs');
var csvWriter = require('csv-write-stream')
var writer = csvWriter()
writer.pipe(fs.createWriteStream('out.csv'))
writer.write({hello: "world", foo: "bar", baz: "taco"})
writer.end()
我喜欢它的简单性。但是,这总是会创建一个新文件。我怎么能附加一些东西到这个文件?我什至可以使用同一个库吗?
其实fs.createWriteStream
函数决定了如何打开'out.csv'
在您的情况下,您可以使用 a
标志打开此文件进行添加:
writer.pipe(fs.createWriteStream('out.csv', {flags: 'a'}))
可能晚了,但对于遇到与我相同问题的人错误:未指定headers
if (!fs.existsSync(finalPathFile))
writer = csvWriter({ headers: ["header1", "header2"]});
else
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(finalPathFile, {flags: 'a'}));
writer.write({
header1:"hello",
header2:"world",
});
writer.end();
这个概念代表当你第一次访问文件时,你设置了headers,这样它就可以被其他后端软件读取,比如Excel。之后,当您稍后再次访问该文件时,您不会设置 headers。
但请记住,每次写入文件时,都需要设置要写入的列。
然后你会得到你想要的结果,它是这样的:
header1,header2
John,5th avenue,
Richard,St. Jorge street
我遇到了问题,我尝试在 header 之后写入的第一行数据为空(只是一堆像这样的逗号 ,)。
当我尝试将 sendHeaders 设置为 false 时,我也收到错误:没有 headers 消息。
我的解决方案基于@Firecat 的原始答案。我对此进行了修改,这对我来说非常有效。
const fs = require('fs');
var csvWriter = require('csv-write-stream');
var writer = csvWriter({sendHeaders: false}); //Instantiate var
var csvFilename = "C:\some\path\myfile.csv";
// If CSV file does not exist, create it and add the headers
if (!fs.existsSync(csvFilename)) {
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(csvFilename));
writer.write({
header1: 'DATE',
header2: 'LASTNAME',
header3: 'FIRSTNAME'
});
writer.end();
}
// Append some data to CSV the file
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(csvFilename, {flags: 'a'}));
writer.write({
header1: '2018-12-31',
header2: 'Smith',
header3: 'John'
});
writer.end();
// Append more data to CSV the file
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(csvFilename, {flags: 'a'}));
writer.write({
header1: '2019-01-01',
header2: 'Jones',
header3: 'Bob'
});
writer.end();
使用fs.appendFile。
如果文件不存在,它将创建文件,或者将数据附加到现有文件。
userObj=JSON.parse(JSON.stringify(userObj));//data to add
fs.appendFile('filename.csv', userObj, (err) => {
if (err) console.error('Couldn\'t append the data');
console.log('The data was appended to file!');
});
我目前正在使用 csv-write-stream 将内容写入 csv 文件:
var fs = require('fs');
var csvWriter = require('csv-write-stream')
var writer = csvWriter()
writer.pipe(fs.createWriteStream('out.csv'))
writer.write({hello: "world", foo: "bar", baz: "taco"})
writer.end()
我喜欢它的简单性。但是,这总是会创建一个新文件。我怎么能附加一些东西到这个文件?我什至可以使用同一个库吗?
其实fs.createWriteStream
函数决定了如何打开'out.csv'
在您的情况下,您可以使用 a
标志打开此文件进行添加:
writer.pipe(fs.createWriteStream('out.csv', {flags: 'a'}))
可能晚了,但对于遇到与我相同问题的人错误:未指定headers
if (!fs.existsSync(finalPathFile))
writer = csvWriter({ headers: ["header1", "header2"]});
else
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(finalPathFile, {flags: 'a'}));
writer.write({
header1:"hello",
header2:"world",
});
writer.end();
这个概念代表当你第一次访问文件时,你设置了headers,这样它就可以被其他后端软件读取,比如Excel。之后,当您稍后再次访问该文件时,您不会设置 headers。 但请记住,每次写入文件时,都需要设置要写入的列。 然后你会得到你想要的结果,它是这样的:
header1,header2
John,5th avenue,
Richard,St. Jorge street
我遇到了问题,我尝试在 header 之后写入的第一行数据为空(只是一堆像这样的逗号 ,)。
当我尝试将 sendHeaders 设置为 false 时,我也收到错误:没有 headers 消息。
我的解决方案基于@Firecat 的原始答案。我对此进行了修改,这对我来说非常有效。
const fs = require('fs');
var csvWriter = require('csv-write-stream');
var writer = csvWriter({sendHeaders: false}); //Instantiate var
var csvFilename = "C:\some\path\myfile.csv";
// If CSV file does not exist, create it and add the headers
if (!fs.existsSync(csvFilename)) {
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(csvFilename));
writer.write({
header1: 'DATE',
header2: 'LASTNAME',
header3: 'FIRSTNAME'
});
writer.end();
}
// Append some data to CSV the file
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(csvFilename, {flags: 'a'}));
writer.write({
header1: '2018-12-31',
header2: 'Smith',
header3: 'John'
});
writer.end();
// Append more data to CSV the file
writer = csvWriter({sendHeaders: false});
writer.pipe(fs.createWriteStream(csvFilename, {flags: 'a'}));
writer.write({
header1: '2019-01-01',
header2: 'Jones',
header3: 'Bob'
});
writer.end();
使用fs.appendFile。 如果文件不存在,它将创建文件,或者将数据附加到现有文件。
userObj=JSON.parse(JSON.stringify(userObj));//data to add
fs.appendFile('filename.csv', userObj, (err) => {
if (err) console.error('Couldn\'t append the data');
console.log('The data was appended to file!');
});