我遇到一种情况,用户可以上传CSV文件。该CSV文件包含大量数据,但我仅对2列(ID和日期)感兴趣。目前,我正在使用Papaparse解析CSV
Papa.parse(ev.data, {
delimiter: "",
newline: "",
quoteChar: '"',
header: true,
error: function(err, file, inputElem, reason) { },
complete: function (results) {
this.parsed_csv = results.data;
}
});
运行该命令时,this.parsed_csv
代表以字段名称作为关键字的数据对象。因此,如果我JSON.stringify
的输出是这样的
[
{
"ID": 123456,
"Date": "2012-01-01",
"Irrelevant_Column_1": 123,
"Irrelevant_Column_2": 234,
"Irrelevant_Column_3": 345,
"Irrelevant_Column_4": 456
},
...
]
所以我的主要问题是如何摆脱不需要的列,而只生成包含列ID和日期的新csv?
谢谢
我意识到的一件事是,有一种方法可以添加动态变量。例如,我让用户选择要映射的列。现在我需要做这样的事情
let ID = this.selectedIdCol;
this.parsed_csv = results.data.map(element => ({ID: element.ID, Date: element.Date}));
这是说ID未使用。谢谢
答案 0 :(得分:2)
subprocess.run([
'composer', 'transaction',
'submit', '-c', 'admin@tutorial-network',
'-d', '{"$class": "org.acme.frame.auction.SetupDemo1"}'],
# probably a good idea
check=True)
只需使用以下代码即可产生结果:
let data = [
{
"ID": 123456,
"Date": "2012-01-01",
"Irrelevant_Column_1": 123,
"Irrelevant_Column_2": 234,
"Irrelevant_Column_3": 345,
"Irrelevant_Column_4": 456
},
...
]
现在您需要使用列,请在这些列上生成一个新的CSV
答案 1 :(得分:0)
请注意,如果您正在加载一个巨大的文件,则在解析之后,整个文件都将保存在内存中。此外,由于工作量大,它可能会冻结浏览器。您可以通过读取和丢弃列来避免这种情况:
在实施之前,您应该阅读Papaparse's FAQ。总而言之,您将通过从step
或chunk
回调中提取所需的列来存储所需的列。
答案 2 :(得分:0)
正如上面 Serrurier 所指出的那样,您应该使用step / chunk函数来更改数据,而不是像在内存数据中已经可用的解析映射之后那样。
>PapaParse.parse(file, { skipEmptyLines: true, header: true, step: (results, parser) => {
results.data = _.pick(results.data , [ 'column1' 'column2']);
return results;
}});