我有下表"日期" ,它有一个包含符号的sym列和一个包含字符串列表的d列,并希望将其保存到常规CSV文件中。无法找到一个好方法。有什么建议吗?
q)dates
sym d
----------------------------------------------------------------------------
6AH0 "1970.03.16" "1980.03.17" "1990.03.19" "2010.03.15"
6AH6 "1976.03.15" "1986.03.17" "1996.03.18" "2016.03.14"
6AH7 "1977.03.14" "1987.03.16" "1997.03.17" "2017.03.13"
6AH8 "1978.03.13" "1988.03.14" "1998.03.16" "2018.03.19"
6AH9 "1979.03.19" "1989.03.13" "1999.03.15" "2019.03.18"
当我尝试进行常规保存时,会发生以下错误:
q)save `:dates.csv
k){$[t&77>t:@y;$y;x;-14!'y;y]}
'type
q))
答案 0 :(得分:3)
Kdb +中的内部表 - > csv转换函数无法处理列中的嵌套列表。表格中的d
列是字符列表的列表。但是,转换函数能够处理简单嵌套的列(深度为1)。
因此,您可以将d
列转换为字符列表,然后使用内部函数保存为CSV:
/ generate a table of dummy data
q)show dates:flip `sym`d!(`6AH0`6AH6`6AH7;string (3;0N)#12?.z.d)
sym d
--------------------------------------------------------
6AH0 "2008.02.04" "2015.01.02" "2003.07.05" "2005.02.25"
6AH6 "2012.10.25" "2008.08.28" "2017.01.25" "2007.12.27"
6AH7 "2004.02.01" "2005.06.06" "2013.02.11" "2010.12.20"
/ convert 'd' column to simple list - the (" " sv') is the conversion func here
q)@[`dates;`d;" " sv']
`dates
/ review what was done
q)show dates
sym d
--------------------------------------------------
6AH0 "2008.02.04 2015.01.02 2003.07.05 2005.02.25"
6AH6 "2012.10.25 2008.08.28 2017.01.25 2007.12.27"
6AH7 "2004.02.01 2005.06.06 2013.02.11 2010.12.20"
/ save to csv
q)save `:dates.csv
`:dates.csv
/ review saved csv
q)\cat dates.csv
"sym,d"
"6AH0,2008.02.04 2015.01.02 2003.07.05 2005.02.25"
"6AH6,2012.10.25 2008.08.28 2017.01.25 2007.12.27"
"6AH7,2004.02.01 2005.06.06 2013.02.11 2010.12.20"
答案 1 :(得分:2)
根据csv规范,您希望将列表展平并用逗号分隔,并双引号列表。
'保存'仅限于文件的名称必须与您要保存的全局变量相同。
如果我的任务是我的问题,我会这样做;
`:myFileNamedWhatever.csv 0: csv 0: select sym,csv sv'd from dates
解释
csv 0: table /csv is a variable, literally defined as "," - its good for readability. csv 0: table converts the table to a comma separated list of strings
`:file 0: listOfStrings /this takes a LIST of strings and pushes them to the file handle. Each element of the list is a new line in the file
我更喜欢这种方法,因为它很通用,可以保存各种类型。您可以在函数等中使用它。
稍后我决定将它保存为管道(或任何)分隔文件;
`:myNewFile.psv 0: "|" 0: select sym,"|"sv'd from table