csv-parse 抛出无效的开场白:在 line 的字段内找到了一个引号
csv-parse is throwing Invalid Opening Quote: a quote is found inside a field at line
我知道还有其他帖子,但其中 none 似乎解决了我的问题。我在节点 js 中使用 csv-parse。这是我正在尝试解析的 CSV header 和记录。
sku,description,productUnitOfMeasure,unitCost,retailPrice,wholesalePrice,dropShipPrice,assemblyCost,planner,comments,productId,fileUpdate,SkuStatus,Master Planning Family,Category,Sub-Category,Brand,ShortCode,Import/Domestic,Inventory Value,Master Pack Quantity,Pallet / TI / HI,40HC Quantity,Product Group ID
032406021945-GreenBay,TFAL B2080264 INIT TNS GRY SAUTE PN 8",EA,7.72,13.99,0.00,0.00,0,Whitney Ehlke-2307,,032406021945,2022-01-25,New,COOKWARE,OPENSTOCK,NONE,T-FAL,B2080264,Domestic,208.44,3,0/0/0,0,23
我无法控制此文件。我只需要能够解析它。你会看到在描述的末尾有一个双引号:TFal B2080264 INI TNS GRY SAUTE PN 8"
.
我需要双引号保留在那里并将其作为一个字段进行解析。我不断收到此错误:
Invalid Opening Quote: a quote is found inside a field at line 2.
报价不是开场白。从技术上讲,这是一个结束。但无论如何,它不会解析。
这是我目前的代码:
const parser = fs.createReadStream(filePath).pipe(
parse({ columns: true, relax_quotes: true, escape: '\', ltrim: true, rtrim: true })
)
我删除了一些参数并尝试了其他参数,但无济于事。有什么想法吗??
此代码适用于最新的 csv-parse 版本 (5.0.4)。您使用的是哪个版本的 csv-parse 软件包?我问是因为 looks like 该选项可能最近才从 relax
重命名为 relax_quotes
。
所以,我认为解决方案是:
- 升级到最新的csv-parse,并注明
relax_quotes
,或
- 继续使用您当前的 csv-parse 版本,并注明
relax
为了确保 relax_quotes
与当前库一起工作,我测试了以下代码并且它按预期工作:
const csv = require('csv-parse');
const fs = require('fs');
const parser = fs.createReadStream("70880341.csv").pipe(
csv.parse({ columns: true, relax_quotes: true, escape: '\', ltrim: true, rtrim: true })
)
const records = [];
parser.on('readable', function() {
let record;
while ((record = parser.read()) !== null) {
records.push(record);
}
});
parser.on('error', function(err) {
console.error(err.message);
});
parser.on('end', function() {
console.log(records);
});
结果:
[{
sku: '032406021945-GreenBay',
description: 'TFAL B2080264 INIT TNS GRY SAUTE PN 8"',
productUnitOfMeasure: 'EA',
...
}]
我知道还有其他帖子,但其中 none 似乎解决了我的问题。我在节点 js 中使用 csv-parse。这是我正在尝试解析的 CSV header 和记录。
sku,description,productUnitOfMeasure,unitCost,retailPrice,wholesalePrice,dropShipPrice,assemblyCost,planner,comments,productId,fileUpdate,SkuStatus,Master Planning Family,Category,Sub-Category,Brand,ShortCode,Import/Domestic,Inventory Value,Master Pack Quantity,Pallet / TI / HI,40HC Quantity,Product Group ID
032406021945-GreenBay,TFAL B2080264 INIT TNS GRY SAUTE PN 8",EA,7.72,13.99,0.00,0.00,0,Whitney Ehlke-2307,,032406021945,2022-01-25,New,COOKWARE,OPENSTOCK,NONE,T-FAL,B2080264,Domestic,208.44,3,0/0/0,0,23
我无法控制此文件。我只需要能够解析它。你会看到在描述的末尾有一个双引号:TFal B2080264 INI TNS GRY SAUTE PN 8"
.
我需要双引号保留在那里并将其作为一个字段进行解析。我不断收到此错误:
Invalid Opening Quote: a quote is found inside a field at line 2.
报价不是开场白。从技术上讲,这是一个结束。但无论如何,它不会解析。
这是我目前的代码:
const parser = fs.createReadStream(filePath).pipe(
parse({ columns: true, relax_quotes: true, escape: '\', ltrim: true, rtrim: true })
)
我删除了一些参数并尝试了其他参数,但无济于事。有什么想法吗??
此代码适用于最新的 csv-parse 版本 (5.0.4)。您使用的是哪个版本的 csv-parse 软件包?我问是因为 looks like 该选项可能最近才从 relax
重命名为 relax_quotes
。
所以,我认为解决方案是:
- 升级到最新的csv-parse,并注明
relax_quotes
,或 - 继续使用您当前的 csv-parse 版本,并注明
relax
为了确保 relax_quotes
与当前库一起工作,我测试了以下代码并且它按预期工作:
const csv = require('csv-parse');
const fs = require('fs');
const parser = fs.createReadStream("70880341.csv").pipe(
csv.parse({ columns: true, relax_quotes: true, escape: '\', ltrim: true, rtrim: true })
)
const records = [];
parser.on('readable', function() {
let record;
while ((record = parser.read()) !== null) {
records.push(record);
}
});
parser.on('error', function(err) {
console.error(err.message);
});
parser.on('end', function() {
console.log(records);
});
结果:
[{
sku: '032406021945-GreenBay',
description: 'TFAL B2080264 INIT TNS GRY SAUTE PN 8"',
productUnitOfMeasure: 'EA',
...
}]