首页 > 解决方案 > 如何在scala中读取CSV文件

问题描述

我有一个 CSV 文件,我想读取该文件并将其存储在案例类中。据我所知,CSV 是一个逗号分隔值文件。但是对于我的 csv 文件,有些数据本身已经带有逗号。它为每个逗号创建新列。所以问题是如何从中拆分数据。

第一个数据

04/20/2021 16:20(1st column)    Here a bunch of basic techniques that suit most businesses, and easy-to-follow steps that can help you create a strategy for your social media marketing goals.(2nd column)

第二个数据

11-07-2021 12:15(1st column)    Focus on attracting real followers who are genuinely interested in your content, and make the most of your social media marketing efforts.(2nd column)
var i=0
var length=0
val data=Source.fromFile(file)
for (line <- data.getLines) {
  val cols = line.split(",").map(_.trim)
  length = cols.length  
  while(i<length){
    //println(cols(i))
    i=i+1
  }
  i=0
}

标签: scalacsvfileplayframework

解决方案


如果您正在阅读复杂的 CSV 文件,那么理想的解决方案是使用现有的库。这是 CSV 的 ScalaDex 搜索结果的链接。

ScalaDex CSV 搜索

但是,根据评论,您似乎实际上可能想要读取存储在 Google 表格中的数据。如果是这种情况,您可以利用自己具有一定灵活性的事实将数据保存在文本文件中。当我想从 Scala 中的 Google Sheet 读取数据时,我首先使用的方法是将文件保存为不难阅读的格式。如果字段嵌入了逗号但没有制表符,这很常见,那么我会将文件保存为 TSV 并使用split("\t").

一段仅使用标准库的简单代码可能如下所示:

val source = scala.io.Source.fromFile("data.tsv")
val data = source.getLines.map(_.split("\t")).toArray
source.close

在此之后,dataArray[Array[String]]包含您的数据,您可以根据需要进行处理。

当然,如果您的数据同时包含制表符和逗号,那么您真的很想使用那些更强大的外部库之一。


推荐阅读