Skip to content

Commit 6619e70

Browse files
authored
Merge pull request #107 from Kotlin/fix-csv-write
Fix csv write
2 parents 65050c3 + f6f079b commit 6619e70

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

plugins/dataframe-gradle-plugin/src/integrationTest/kotlin/org/jetbrains/dataframe/gradle/SchemaGeneratorPluginIntegrationTest.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ class SchemaGeneratorPluginIntegrationTest : AbstractDataFramePluginIntegrationT
218218
fun escapeDoubleQuotes(it: Char) = if (it == '"') "\"\"" else it.toString()
219219

220220
val (_, result) = runGradleBuild(":build") { buildDir ->
221-
val dataFile = File(buildDir, "data.csv")
221+
val filename = "data.csv"
222+
val dataFile = File(buildDir, filename)
222223
val notSupportedChars = setOf('\n', '\r')
223224
(Char.MIN_VALUE..Char.MAX_VALUE).asSequence()
224225
.filterNot { it in notSupportedChars }
@@ -239,7 +240,7 @@ class SchemaGeneratorPluginIntegrationTest : AbstractDataFramePluginIntegrationT
239240
import org.jetbrains.kotlinx.dataframe.api.filter
240241
241242
fun main() {
242-
val df = DataFrame.read("$dataFile").cast<Schema>()
243+
val df = DataFrame.read("${TestData.csvName}").cast<Schema>()
243244
}
244245
""".trimIndent())
245246

@@ -264,7 +265,7 @@ class SchemaGeneratorPluginIntegrationTest : AbstractDataFramePluginIntegrationT
264265
265266
dataframes {
266267
schema {
267-
data = "$dataFile"
268+
data = "${TestData.csvName}"
268269
name = "Schema"
269270
packageName = ""
270271
}
@@ -295,7 +296,7 @@ class SchemaGeneratorPluginIntegrationTest : AbstractDataFramePluginIntegrationT
295296
}
296297
297298
fun main() {
298-
val df = DataFrame.read("$dataFile").cast<MySchema>()
299+
val df = DataFrame.read("${TestData.csvName}").cast<MySchema>()
299300
val df1 = df.filter { age != null }
300301
}
301302
""".trimIndent())

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)