javascript - 快速 csv 转换似乎正在剥离列
问题描述
我正在开发一个项目,该项目在其基础级别解析 csv 文件并对其进行转换,以便仅使用已解析文件中的某些列将某些列映射到新文件。包括输入 .csv 以供参考。
Co Code,Batch ID,File #,Reg Hours,O/T Hours,Reg Earnings,O/T
Earnings,Hours 3 Code,Hours 3 Amount,Hours 3 Code,Hours 3 Amount,Hours 4
Code,Hours 4 Amount,Hours 4 Code,Hours 4 Amount,Earnings 3 Code,Earnings 3
Amount,Earnings 3 Code,Earnings 3 Amount,Earnings 4 Code,Earnings 4
Amount,Earnings 4 Code,Earnings 4 Amount,Earnings 5 Code,Earnings 5
Amount,Earnings 5 Code,Earnings 5 Amount,Temp Dept
83M,1,102,70.00,14.00,,,,,,,,,,,,,,,,,,,,,,,
83M,1,109,92.50,16.50,,,D,5.00,,,,,,,,,,,,,,,,,,,
83M,1,61,70.00,11.50,,,,,,,V,24.00,,,,,,,,,,,,,,,
83M,1,6384,69.00,15.50,,,D,9.50,,,,,,,,,,,,,,,,,,,
83M,1,6568,78.50,29.50,,,D,18.00,,,,,,,,,,,,,,,,,,,
83M,1,6583,84.50,32.50,,,D,10.00,,,,,,,,,,,,,,,,,,,
83M,1,6596,70.50,27.50,,,D,11.50,,,,,,,,,,,,,,,,,,,
83M,1,6627,95.50,23.50,,,D,12.50,,,,,,,,,,,,,,,,,,,
83M,1,6628,83.50,31.50,,,D,12.50,,,,,,,,,,,,,,,,,,,
83M,1,93,45.00,21.50,,,,,,,11,16.00,V,16.00,,,,,,,,,,,,,,,
我发现当我使用 fast-csv 提供的转换函数时,有一列特别是“Hours 3 Amount”,它映射到“D/T hours”,即使在返回之前也不返回任何值(尽管有一些)转换后的对象(请参阅对象输出样本和 csv 输出样本)。
{ 'Co Code': '83M',
'Batch ID': '1',
'File #': '93',
'Reg Hours': '36.50',
'O/T Hours': '10.00',
'Reg Earnings': '',
'O/T Earnings': '',
'Hours 3 Code': '',
'Hours 3 Amount': '',
'Hours 4 Code': 'H',
'Hours 4 Amount': '8.00',
'Earnings 3 Code': '',
'Earnings 3 Amount': '',
'Earnings 4 Code': '',
'Earnings 4 Amount': '',
'Earnings 5 Code': '',
'Earnings 5 Amount': '',
'Temp Dept': '' }
Co Code,Batch Id,File #,Reg Hours,O/T Hours,D/T Hours,Reg Earnings,OT
Earnings,DT Earnigs,Pay Period Start,Pay Period End,Total
83M,1,6596,30.00,,,,,,12/30/18,1/12/19,
83M,1,6628,66.50,19.00,,,,,12/30/18,1/12/19,
83M,1,6650,20.50,18.50,,,,,12/30/18,1/12/19,
有趣的是,我可以输入一个字符串文字作为 'D/T hours 的值,它会出现在输出 .csv 文件中。经过仔细检查,我发现如果我注释掉转换函数,输出 csv 虽然是原始未转换的形式,但会填充“小时 3 数量”值(见下文)。我还包括了我的代码。
// Process the file by moving the cells and inserting the start and end date
const processFile = (fileName, file) => {
csv
.fromPath(basePath + file, {
ignoreEmpty: false,
headers: true,
discardUnmappedColumns: true,
oobjectMode: true
})
.transform(obj => {
[startDate, endDate] = fileName;
console.log(obj); // Does not include the Hours 3 Amount property
if (obj && obj['Co Code'] != '') {
return {
'Co Code': obj['Co Code'],
'Batch Id': obj['Batch ID'],
'File #': obj['File #'],
'Reg Hours': obj['Reg Hours'],
'O/T Hours': obj['O/T Hours'],
'D/T Hours': obj['Hours 3 Amount'],
'Reg Earnings': '',
'OT Earnings': '',
'DT Earnigs': '',
'Pay Period Start': startDate,
'Pay Period End': endDate,
Total: ''
};
}
})
.on('error', () => {
return false;
})
.pipe(csv.createWriteStream())
.pipe(
fs.createWriteStream('./working-files/Payroll-files/output/out.csv', {
encoding: 'utf8',
flags: 'a',
headers: true
})
);
};
有谁知道为什么转换函数会在返回转换后的对象之前删除列?
解决方案
没关系。我确定我的源 .csv 有重复的 hours 3 Amount 列。如果存在重复,则变换函数显然不会返回该值。
推荐阅读
- python - 从 Python 中的文本中提取特定单词的 Findall 错误
- python - pd.read_sql 然后将所有列中的数据类型结果检查为“对象”?
- hibernate - 我将请求正文中的日期发送到 REST API 发布请求,但是在检查表中插入的记录时,时间戳被插入
- android - ExoPlayer shuffle 无法获取所有歌曲
- laravel - 如何在 Laravel 8 中使用 Carbon 检查日期验证。 *
- c# - 括号中的异步是否阻塞?(非文字表达)
- c++ - 如何使用类的属性创建固定大小的数组?
- groovy - 如何在我的 groovy 脚本的 --srcPattern 标志中使用正则表达式?
- postman - 使用 API 与 MQTT 发布者/订阅者通信
- r - 通过列的组合重塑 data.frame