如何将新日期列填充到现有 CSV 文件
How to populate new date column to existing CSV file
我正在处理 CSV 文件 (~20MB)。它有如下所示的三列,文件名表示开始时间,即第一行的时间戳(在本例中文件名是 20200325131010000.csv
)。
x;y;z
3;-132;976
3;-131;978
3;-130;975
4;-132;975
5;-131;976
3;-132;975
连续行的时间戳相差20毫秒。如何有效地将新日期列填充到现有文件中?最终的 CSV 文件应如下所示:
timestamp;x;y;z
20200325131010000;3;-132;976
20200325131010020;3;-131;978
20200325131010040;3;-130;975
20200325131010060;4;-132;975
20200325131010080;5;-131;976
20200325131010100;3;-132;975
到目前为止,我已经尝试了以下代码:
const csv = require('csv-parser');
const fs = require('fs');
var json2csv = require('json2csv').parse;
var dataArray = [];
fs.createReadStream('C:/Users/Downloads/20200325131010000.csv')
.pipe(csv())
.on('data', (row) => {
row.timestamp= "20200325131010000";
dataArray.push(row);
})
.on('end', () => {
var result = json2csv({ data: dataArray, fields: Object.keys(dataArray[0]) });
fs.writeFileSync("test.csv", result);
});
以上代码生成以下输出(所有时间戳都相同,这是不可取的):
timestamp;x;y;z
20200325131010000;3;-132;976
20200325131010000;3;-131;978
20200325131010000;3;-130;975
20200325131010000;4;-132;975
20200325131010000;5;-131;976
20200325131010000;3;-132;975
此代码的问题在于它向所有行添加了相同的时间戳(即 20200325131010000
)。如何正确填充时间戳列?
请建议我实现此目标的有效方法。
我认为这段代码应该可以解决您的问题。
const csv = require('csv-parser');
const fs = require('fs');
var json2csv = require('json2csv').parse;
const filePath = 'C:/Users/Downloads/20200325131010000.csv';
const fileName = (/^.+\/([^/]+)\.csv$/gi).exec(filePath)[1]; // extract file name from path
const intialTimestamp = parseInt(fileName); // convert string to number
let i = 0;
var dataArray = [];
fs.createReadStream(filePath)
.pipe(csv())
.on('data', (row) => {
row.timestamp= (intialTimestamp + (i * 20)).toString(); // increase the number by 20 everytime
dataArray.push(row);
i++;
})
.on('end', () => {
var result = json2csv({ data: dataArray, fields: Object.keys(dataArray[0]) });
fs.writeFileSync("test.csv", result);
});
我正在处理 CSV 文件 (~20MB)。它有如下所示的三列,文件名表示开始时间,即第一行的时间戳(在本例中文件名是 20200325131010000.csv
)。
x;y;z
3;-132;976
3;-131;978
3;-130;975
4;-132;975
5;-131;976
3;-132;975
连续行的时间戳相差20毫秒。如何有效地将新日期列填充到现有文件中?最终的 CSV 文件应如下所示:
timestamp;x;y;z
20200325131010000;3;-132;976
20200325131010020;3;-131;978
20200325131010040;3;-130;975
20200325131010060;4;-132;975
20200325131010080;5;-131;976
20200325131010100;3;-132;975
到目前为止,我已经尝试了以下代码:
const csv = require('csv-parser');
const fs = require('fs');
var json2csv = require('json2csv').parse;
var dataArray = [];
fs.createReadStream('C:/Users/Downloads/20200325131010000.csv')
.pipe(csv())
.on('data', (row) => {
row.timestamp= "20200325131010000";
dataArray.push(row);
})
.on('end', () => {
var result = json2csv({ data: dataArray, fields: Object.keys(dataArray[0]) });
fs.writeFileSync("test.csv", result);
});
以上代码生成以下输出(所有时间戳都相同,这是不可取的):
timestamp;x;y;z
20200325131010000;3;-132;976
20200325131010000;3;-131;978
20200325131010000;3;-130;975
20200325131010000;4;-132;975
20200325131010000;5;-131;976
20200325131010000;3;-132;975
此代码的问题在于它向所有行添加了相同的时间戳(即 20200325131010000
)。如何正确填充时间戳列?
请建议我实现此目标的有效方法。
我认为这段代码应该可以解决您的问题。
const csv = require('csv-parser');
const fs = require('fs');
var json2csv = require('json2csv').parse;
const filePath = 'C:/Users/Downloads/20200325131010000.csv';
const fileName = (/^.+\/([^/]+)\.csv$/gi).exec(filePath)[1]; // extract file name from path
const intialTimestamp = parseInt(fileName); // convert string to number
let i = 0;
var dataArray = [];
fs.createReadStream(filePath)
.pipe(csv())
.on('data', (row) => {
row.timestamp= (intialTimestamp + (i * 20)).toString(); // increase the number by 20 everytime
dataArray.push(row);
i++;
})
.on('end', () => {
var result = json2csv({ data: dataArray, fields: Object.keys(dataArray[0]) });
fs.writeFileSync("test.csv", result);
});