Skip to content

Commit 8eee303

Browse files
committed
Remove leading line break when writing CSV
In `CSVFormat.DEFAULT.withHeader()`, withHeader() accepts vararg column names. We pass an empty var arg, so it tries to write empty header (just the line break).
1 parent 65050c3 commit 8eee303

File tree

2 files changed

+21
-8
lines changed
  • src
    • main/kotlin/org/jetbrains/kotlinx/dataframe/io
    • test/kotlin/org/jetbrains/kotlinx/dataframe/io

2 files changed

+21
-8
lines changed

src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ import org.jetbrains.kotlinx.dataframe.AnyFrame
66
import org.jetbrains.kotlinx.dataframe.AnyRow
77
import org.jetbrains.kotlinx.dataframe.DataColumn
88
import org.jetbrains.kotlinx.dataframe.DataFrame
9-
import org.jetbrains.kotlinx.dataframe.api.ParserOptions
10-
import org.jetbrains.kotlinx.dataframe.api.forEachRow
11-
import org.jetbrains.kotlinx.dataframe.api.toDataFrame
12-
import org.jetbrains.kotlinx.dataframe.api.tryParse
9+
import org.jetbrains.kotlinx.dataframe.api.*
1310
import org.jetbrains.kotlinx.dataframe.impl.ColumnNameGenerator
1411
import org.jetbrains.kotlinx.dataframe.impl.api.Parsers
1512
import org.jetbrains.kotlinx.dataframe.impl.api.parse
@@ -296,13 +293,22 @@ public fun DataFrame.Companion.readDelim(
296293
return cols.toDataFrame()
297294
}
298295

299-
public fun AnyFrame.writeCSV(file: File, format: CSVFormat = CSVFormat.DEFAULT.withHeader()): Unit =
296+
public fun AnyFrame.writeCSV(
297+
file: File,
298+
format: CSVFormat = CSVFormat.DEFAULT
299+
): Unit =
300300
writeCSV(FileWriter(file), format)
301301

302-
public fun AnyFrame.writeCSV(path: String, format: CSVFormat = CSVFormat.DEFAULT.withHeader()): Unit =
302+
public fun AnyFrame.writeCSV(
303+
path: String,
304+
format: CSVFormat = CSVFormat.DEFAULT
305+
): Unit =
303306
writeCSV(FileWriter(path), format)
304307

305-
public fun AnyFrame.writeCSV(writer: Appendable, format: CSVFormat = CSVFormat.DEFAULT.withHeader()): Unit =
308+
public fun AnyFrame.writeCSV(
309+
writer: Appendable,
310+
format: CSVFormat = CSVFormat.DEFAULT
311+
) {
306312
format.print(writer).use { printer ->
307313
printer.printRecord(columnNames())
308314
forEachRow {
@@ -316,8 +322,9 @@ public fun AnyFrame.writeCSV(writer: Appendable, format: CSVFormat = CSVFormat.D
316322
printer.printRecord(values)
317323
}
318324
}
325+
}
319326

320-
public fun AnyFrame.toCsv(format: CSVFormat = CSVFormat.DEFAULT.withHeader()): String =
327+
public fun AnyFrame.toCsv(format: CSVFormat = CSVFormat.DEFAULT): String =
321328
StringWriter().use {
322329
this.writeCSV(it, format)
323330
it

src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/CsvTests.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ class CsvTests {
180180
res shouldBe grouped
181181
}
182182

183+
@Test
184+
fun `CSV String of saved dataframe starts with column name`() {
185+
val df = dataFrameOf("a")(1)
186+
df.toCsv().first() shouldBe 'a'
187+
}
188+
183189
@Test
184190
fun `guess tsv`() {
185191
val df = DataFrame.read(testResource("abc.tsv"))

0 commit comments

Comments
 (0)