使用Papaparse

时间:2019-01-27 12:19:18

标签: javascript csv papaparse

我遇到一种情况,用户可以上传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未使用。谢谢

3 个答案:

答案 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。总而言之,您将通过从stepchunk回调中提取所需的列来存储所需的列。

答案 2 :(得分:0)

正如上面 Serrurier 所指出的那样,您应该使用step / chunk函数来更改数据,而不是像在内存数据中已经可用的解析映射之后那样。

>
PapaParse.parse(file, { skipEmptyLines: true, header: true, step: (results, parser) => {
                  results.data = _.pick(results.data , [ 'column1' 'column2']);
                  return results;
           }});