Javascript Node.js:从CSV文件中删除特定列
我有一个CSV文件可以包含大约一百万条记录,如何删除以u开头的列并生成结果CSVJavascript Node.js:从CSV文件中删除特定列,javascript,node.js,fs,Javascript,Node.js,Fs,我有一个CSV文件可以包含大约一百万条记录,如何删除以u开头的列并生成结果CSV 为了简单起见,考虑我有以下CSV Sr.No Col1 Col2 _Col3 Col4 _Col5 1 txt png 676766 win 8787 2 jpg pdf 565657 lin 8787 3 pdf jpg 786786 lin 9898 我希望输出是 Sr.No Col1 Col2 Col4 1 txt png win 2
为了简单起见,考虑我有以下CSV
Sr.No Col1 Col2 _Col3 Col4 _Col5
1 txt png 676766 win 8787
2 jpg pdf 565657 lin 8787
3 pdf jpg 786786 lin 9898
我希望输出是
Sr.No Col1 Col2 Col4
1 txt png win
2 jpg pdf lin
3 pdf jpg lin
我是否需要阅读整个文件来实现这一点,或者是否有更好的方法来实现这一点
const csv = require('csv-parser');
const fs = require('fs');
fs.createReadStream('data.csv')
.pipe(csv())
.on('data', (row) => {
// generate a new csv with removing specific column
})
.on('end', () => {
console.log('CSV file successfully processed');
});
关于如何实现这一目标的任何帮助都会很有帮助
谢谢。实际上,您可以通过使用两个npm包来处理这个问题 将库转换为JSON格式 那就用这个 第二个图书馆。如果你知道你想要的确切字段是什么。您可以传递参数以专门选择所需的字段
const { Parser } = require('json2csv');
const fields = ['field1', 'field2', 'field3'];
const opts = { fields };
try {
const parser = new Parser(opts);
const csv = parser.parse(myData);
console.log(csv);
} catch (err) {
console.error(err);
}
或者,您可以手动修改JSON对象,将这些列删除给任何无意中看到这篇文章的人 我能够使用
fs
和csv
模块使用下面的代码来转换csv
await fs.createReadStream(m.path)
.pipe(csv.parse({delimiter: '\t', columns: true}))
.pipe(csv.transform((input) => {
delete input['_Col3'];
console.log(input);
return input;
}))
.pipe(csv.stringify({header: true}))
.pipe(fs.createWriteStream(transformedPath))
.on('finish', () => {
console.log('finish....');
}).on('error', () => {
console.log('error.....');
});
来源:尝试使用csv库
const csv = require('csv');
const fs = require('fs');
const csvString=`col1,col2
value1,value2`
csv.parse(csvString, {columns: true})
.pipe(csv.transform(({col1,col2}) => ({col1}))) // remove col2
.pipe(csv.stringify({header:true}))
.pipe(fs.createWriteStream('./file.csv'))
使用此函数,我完成了从CSV中删除列的操作
removeCol(csv, col) {
let lines = csv.split("\n");
let headers = lines[0].split(",");
let colNameToRemove = headers.find(h=> h.trim() === col);
let index = headers.indexOf(colNameToRemove);
let newLines = [];
lines.map((line)=>{
let fields = line.split(",");
fields.splice(index, 1)
newLines.push(fields)
})
let arrData = '';
for (let index = 0; index < newLines.length; index++) {
const element = newLines[index];
arrData += element.join(',') + '\n'
}
return arrData;
}
removeCol(csv,col){
让行=csv.split(“\n”);
让页眉=行[0]。拆分(“,”;
让colNameToRemove=headers.find(h=>h.trim()==col);
让index=headers.indexOf(colNameToRemove);
让换行符=[];
line.map((line)=>{
让fields=line.split(“,”);
字段.拼接(索引,1)
换行。推送(字段)
})
让arrData='';
for(让index=0;index
我的文件可能非常大,500Mb或更大。看起来您的解决方案正在将整个数据加载到内存中,这可能会导致程序崩溃,如果我错了,请更正。当然。如果将500MB文件加载到内存中,它可能会崩溃,具体取决于您的资源可用性。但这两个库都提供了使用流媒体的机制,这是文档。在那里,您可以使用流式处理方法。