FSharp.Data 从 Csv 文件中提取列的子集并写入新文件
FSharp.Data extract a subset of columns from a CsvFile and write to new file
在 F# 中(FSharp.Data 的概率),如何从 CsvFile
中提取列的子集?
例如,假设我有一个csv文件file1.csv
:
a, b, c, d
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
并且想要读取,只保留列 a
和 b
,然后将它们写入新的 csv 文件。我希望使用 Map
:
之类的东西
let originalCsvFile = CsvFile.Load("file1.csv")
let subset = originalCsvFile.Map(fun row -> <get columns a and b>) ... write to file("file2.csv")
但不知道fun
我应该使用什么,也不知道如何写一个新文件。
我可以从类型中看出 fun
应该 return 和 CsvRow
但我无法比这更进一步。
CsvProvider
支持 'inline' 架构规范。拥有两种文件类型后,您可以将 file1 行映射到 file2 行,创建一个新的 File2 实例并将新行保存到文件中:
open FSharp.Data
type File1 = CsvProvider<"file1.csv">
type File2 = CsvProvider<"a,b", Schema = "int,int">
let rows =
File1.Load("file1.csv").Rows
|> Seq.map(fun r -> File2.Row(r.A, r.B))
let f2 = new File2(rows)
f2.Save("file2.csv")
在 F# 中(FSharp.Data 的概率),如何从 CsvFile
中提取列的子集?
例如,假设我有一个csv文件file1.csv
:
a, b, c, d
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
并且想要读取,只保留列 a
和 b
,然后将它们写入新的 csv 文件。我希望使用 Map
:
let originalCsvFile = CsvFile.Load("file1.csv")
let subset = originalCsvFile.Map(fun row -> <get columns a and b>) ... write to file("file2.csv")
但不知道fun
我应该使用什么,也不知道如何写一个新文件。
我可以从类型中看出 fun
应该 return 和 CsvRow
但我无法比这更进一步。
CsvProvider
支持 'inline' 架构规范。拥有两种文件类型后,您可以将 file1 行映射到 file2 行,创建一个新的 File2 实例并将新行保存到文件中:
open FSharp.Data
type File1 = CsvProvider<"file1.csv">
type File2 = CsvProvider<"a,b", Schema = "int,int">
let rows =
File1.Load("file1.csv").Rows
|> Seq.map(fun r -> File2.Row(r.A, r.B))
let f2 = new File2(rows)
f2.Save("file2.csv")