Node.js中替换CSV文件指定列空值的实现方法求助
在Node.js中替换CSV指定列的空值
方案一:使用专业CSV处理库(推荐)
专业CSV解析库能正确处理带引号的字段、字段内特殊字符等复杂场景,精准定位目标列。这里使用csv-parser(读取CSV)和csv-writer(写入CSV):
- 安装依赖:
npm install csv-parser csv-writer
- 处理代码:
const fs = require('fs'); const csv = require('csv-parser'); const createCsvWriter = require('csv-writer').createObjectCsvWriter; // 配置CSV写入规则,与原CSV列对应 const csvWriter = createCsvWriter({ path: 'processed.csv', // 处理后的输出文件路径 header: [ {id: 'ID', title: 'ID'}, {id: 'Name', title: 'Name'}, {id: 'openingBalance', title: 'openingBalance'}, {id: 'closingBalance', title: 'closingBalance'} ] }); const processedData = []; // 读取并逐行处理CSV fs.createReadStream('input.csv') // 你的原始CSV文件路径 .pipe(csv()) .on('data', (row) => { // 仅针对closingBalance列的空值替换为0.00 if (!row.closingBalance || row.closingBalance.trim() === '') { row.closingBalance = '0.00'; } processedData.push(row); }) .on('end', () => { // 写入处理后的数据 csvWriter.writeRecords(processedData) .then(() => console.log('CSV处理完成,结果已写入processed.csv')) .catch(err => console.error('写入失败:', err)); }) .on('error', (err) => console.error('读取CSV失败:', err));
方案二:使用正则表达式(适合简单场景)
如果你的CSV格式简单(无字段内换行、无转义引号等特殊情况),可以用正则精准匹配第4列(closingBalance)的空值:
const fs = require('fs'); const inputPath = 'your-input.csv'; const outputPath = 'your-output.csv'; fs.readFile(inputPath, 'utf8', (err, data) => { if (err) return console.log('读取文件错误:', err); // 正则匹配第4列(closingBalance)的空值 const processedData = data.replace( /((?:[^",]+|"[^"]*"),){3}(?=\n|$)/g, '$10.00' ); fs.writeFile(outputPath, processedData, 'utf8', (err) => { if (err) return console.log('写入文件错误:', err); console.log('处理完成,已生成输出文件'); }); });
正则说明:
(?:[^",]+|"[^"]*"):匹配单个CSV字段(支持带引号的字段)((?:...) ,){3}:匹配前3个字段及后续逗号(?=\n|$):断言后面是换行或行尾,说明第4个字段为空- 替换为
$10.00:保留前3个字段的内容,补充0.00作为第4列的值
注意:正则方案仅适用于格式规范的简单CSV,若存在复杂字段结构(如字段内包含换行、转义引号),优先使用方案一。
内容的提问来源于stack exchange,提问作者WALL-E
相关产品推荐
相关产品推荐

