将列表导出为.csv [Scala]

时间:2017-12-09 14:19:34

标签: scala list export-to-csv

我是Scala和编程的新手。 我如何使用Scala将列表写入.csv文件?

所以我有一个对象列表......

List[test] = List(test(Group1,lol,1,2,3),test(Group2,lel,4,5,6)....)

如何将其导出到包含4列的.csv,并且每行都具有对象的属性?

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

案例类是Product的实例,它提供了一种很好的方式来遍历所有字段.productIterator

这个想法是你将所有字段转换为字符串,然后转义反斜杠和双引号(如果有的话),然后将它们连接在一起,双引号并用逗号分隔,然后用新行粘贴所有内容:

list
 .map { 
    _.productIterator
     .map(_.toString)
     .map(_.replaceAll("\\", "\\\\"))
     .map(_.replaceAll("\"", "\\\""))
     .mkString("\"", "\",\"", "\"")
 }.mkString("\n")

答案 1 :(得分:0)

我建议使用现有的资料库:read more
使用SBT解决依赖关系:https://github.com/melrief/PureCSV
文件:
* ./build.sbt
* ./OutputCsv.scala

build.sbt

name := "parse-csv"
version := "1.0.0"
libraryDependencies ++= Seq("com.github.melrief" %% "purecsv" % "0.1.1")

OutputCsv.scala

import purecsv.safe._

object OutputCsv extends App {
    case class Test(group: String, message: String, age: Int)
    val tests = List(Test("Group1", "lol", 1), Test("Group2", "lel", 4))

    println(tests.toCSV()) // just for debug purposes
    tests.writeCSVToFileName("/tmp/example.csv", header=Some(Seq("group", "message", "age")))
}

sbt run将执行文件