【问题标题】:F# csv provider with different column order具有不同列顺序的 F# csv 提供程序
【发布时间】:2014-10-10 10:22:15
【问题描述】:

如果我定义一个类型

type MyType = CsvProvider<"schema.csv",
    Schema="A->MyA=int, B->MyB=int">

如果我加载 csv 之类的

let csv1 = MyType.Load("file1.csv")

如果“file1.csv”包含“schema.csv”具有的所有列,但顺序不同,并且有“schema.csv”中未出现的额外列。如果我只对“schema.csv”中指定的列感兴趣,我还能加载它吗?

【问题讨论】:

  • 我不知道。如果你尝试会发生什么?
  • 架构不匹配或加载奇怪的数据。我不知道是我做错了还是 csv 提供者根本不支持这个用例。

标签: csv f# type-providers f#-data


【解决方案1】:

要么你有一个锁定的 CSV 文件架构,并使用 CsvProvider,要么你没有。

您始终可以选择“恢复”为 CsvFile (CsvParser):http://fsharp.github.io/FSharp.Data/library/CsvFile.html

使用后者,您可以轻松解析任何 CSV 文件,确认其中包含您想要的列,然后根据需要读取它们。

我通常会恢复使用 CsvFile,因为创建 CSV 文件通常是非结构化完成的并且显然是临时的(至少在我遇到的情况下),然后 CsvFile 是一个很好的解决方案,比在CSV 提供者。是的,还有更多的代码,但仍然......

【讨论】:

    【解决方案2】:

    不支持该用例。如果列顺序不同,则无法正常工作。整个 CsvProvider 是建立在假设您提供给它的数据与您提供的样本具有相同结构的基础上的。您可以随时在这里提交问题:https://github.com/fsharp/FSharp.Data/issues/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2014-03-01
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多