将csv文件读入q/kdb+的格式要求
Format requirements for reading csv files into q/kdb+
(我在 OS X 上使用 32 位 KDB+ 3.3。)
如果我将 iris dataset 复制并粘贴到 Excel 并将其另存为“MS-DOS 逗号分隔 (.csv )" 并将其读入 kdb+,我明白了:
q)("FFFFS";enlist ",")0:`iris.csv
5.1al Length Sepal Width Petal Length Petal Width Species
-------------------------------------------------------------
如果我将其另存为“Windows 逗号分隔 (.csv)”,我会得到:
q)("FFFFS";enlist ",")0:`iris.csv
Sepal Length Sepal Width Petal Length Petal Width Species
---------------------------------------------------------
5.1 3.5 1.4 0.2 setosa
4.9 3 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
..
显然,保存为 Windows csv 是我需要做的,this answer explains the differences,但是为什么这对 kdb+ 很重要?是否有一个选项可以添加到代码中以读取 MS-DOS csv 文件?
我 运行 在 windows 而不是 OSX 所以我只能重现相反的问题,但无论哪种方式都是一样的。
使用"read0" 来查看差异。就我而言:
q)read0 `:macintosh.csv
"col1,col2\ra,1\rb,2\rc,3"
q)read0 `:msdos.csv
"col1,col2"
"a,1"
"b,2"
"c,3"
为了使用 0: 将文件解析为 table,kdb 需要多个字符串(如在我的 msdos 文件中),而不是无法识别换行符的单个字符串。
所以我得到:
q)("SI";enlist ",")0:`:msdos.csv
col1 col2
---------
a 1
b 2
c 3
q)("SI";enlist ",")0:`:macintosh.csv
aol1 col2
-----------
您可以在代码中添加一些内容来识别情况并相应地处理它,但这样会更慢且效率更低:
q)("SI";enlist ",")0:{$[1=count x;"\r" vs first x;x]}read0 `:msdos.csv
col1 col2
---------
a 1
b 2
c 3
q)("SI";enlist ",")0:{$[1=count x;"\r" vs first x;x]}read0 `:macintosh.csv
col1 col2
---------
a 1
b 2
c 3
两种方式都有效
(我在 OS X 上使用 32 位 KDB+ 3.3。)
如果我将 iris dataset 复制并粘贴到 Excel 并将其另存为“MS-DOS 逗号分隔 (.csv )" 并将其读入 kdb+,我明白了:
q)("FFFFS";enlist ",")0:`iris.csv
5.1al Length Sepal Width Petal Length Petal Width Species
-------------------------------------------------------------
如果我将其另存为“Windows 逗号分隔 (.csv)”,我会得到:
q)("FFFFS";enlist ",")0:`iris.csv
Sepal Length Sepal Width Petal Length Petal Width Species
---------------------------------------------------------
5.1 3.5 1.4 0.2 setosa
4.9 3 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
..
显然,保存为 Windows csv 是我需要做的,this answer explains the differences,但是为什么这对 kdb+ 很重要?是否有一个选项可以添加到代码中以读取 MS-DOS csv 文件?
我 运行 在 windows 而不是 OSX 所以我只能重现相反的问题,但无论哪种方式都是一样的。
使用"read0" 来查看差异。就我而言:
q)read0 `:macintosh.csv
"col1,col2\ra,1\rb,2\rc,3"
q)read0 `:msdos.csv
"col1,col2"
"a,1"
"b,2"
"c,3"
为了使用 0: 将文件解析为 table,kdb 需要多个字符串(如在我的 msdos 文件中),而不是无法识别换行符的单个字符串。
所以我得到:
q)("SI";enlist ",")0:`:msdos.csv
col1 col2
---------
a 1
b 2
c 3
q)("SI";enlist ",")0:`:macintosh.csv
aol1 col2
-----------
您可以在代码中添加一些内容来识别情况并相应地处理它,但这样会更慢且效率更低:
q)("SI";enlist ",")0:{$[1=count x;"\r" vs first x;x]}read0 `:msdos.csv
col1 col2
---------
a 1
b 2
c 3
q)("SI";enlist ",")0:{$[1=count x;"\r" vs first x;x]}read0 `:macintosh.csv
col1 col2
---------
a 1
b 2
c 3
两种方式都有效