Scala 有一个按列分割 CSV 的好方法吗?

发布于 2024-12-11 13:55:06 字数 115 浏览 0 评论 0原文

我有一个带有列标题的 csv。一列标题是“日期”。如果我想生成两个 CSV,分为 DATE 之前和 DATE 之后/包括 DATE,有没有办法在不进行程序循环的情况下执行此操作?我注意到大多数列表函数都适合按行过滤。

I have a csv with column headings. One column heading is "DATE". If I want to generate two CSVs split into before DATE and after/including DATE is there a way to do this without procedurally looping? I have noticed most of the list functions are suited for filtering by row.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戏剧牡丹亭 2024-12-18 13:55:06

我假设您已经将数据解析为如下内容:

val myDoc = List(
  List("ID", "NAME", "DATE", "DESC"),
  List("1", "a", "1990", "x"), 
  List("2", "b", "1991", "y")
)

现在我们可以使用 splitAtunzip 将列表分开。请注意,我对数据进行了很多假设 - 在实际代码中,我们希望检查列表是否非空,并且标头实际上包含 "DATE" 列。

def split(doc: Seq[Seq[String]]) = {
  val i = doc.head.indexOf("DATE")
  doc.map(_.splitAt(i)).unzip
}

我们可以将其应用到我们的测试数据中:

scala> val (b, a) = split(myDoc)
b: List[Seq[String]] = List(List(ID, NAME), List(1, a), List(2, b))
a: List[Seq[String]] = List(List(DATE, DESC), List(1990, x), List(1991, y))

这对我来说看起来很合理。

I'll assume you already have your data parsed into something like this:

val myDoc = List(
  List("ID", "NAME", "DATE", "DESC"),
  List("1", "a", "1990", "x"), 
  List("2", "b", "1991", "y")
)

Now we can use splitAt and unzip to pull the list apart. Note that I'm assuming a lot about the data—in real code we'd want to check that the list is non-empty and that the header actually contains a "DATE" column.

def split(doc: Seq[Seq[String]]) = {
  val i = doc.head.indexOf("DATE")
  doc.map(_.splitAt(i)).unzip
}

We can apply it to our test data:

scala> val (b, a) = split(myDoc)
b: List[Seq[String]] = List(List(ID, NAME), List(1, a), List(2, b))
a: List[Seq[String]] = List(List(DATE, DESC), List(1990, x), List(1991, y))

This looks reasonable to me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文