首页 > 解决方案 > 运行从 qpython 读取 csv 并分配给表

问题描述

我想在python中运行以下q代码:

table: ("ISI"; enlist ",") 0:`data.csv

我开始探索 qpython,因为它现在更容易在 Windows 中使用(与 pyq 相比),并且想做以下事情:

q = qconnection.QConnection(host = 'localhost', port = 5000)
q.sync('table: ("ISI"; enlist ",") 0:`data.csv')

像这样的事情是否可能,或者我是否需要在 pyq 在 Windows 上稳定时使用它?我看到的 q.sync 示例是采用参数列表而不是直接在 q 环境中运行代码的查询和函数。我想确保我没有遗漏可用于当前任务的其他功能。

标签: kdb

解决方案


当试图访问一个文件时,你必须使用它的文件句柄,它的形式是`:data.csv(注意开头的冒号),而不是你正在使用的符号。您可以使用hsym将符号转换为文件句柄。

您还应该检查文件是否与 q 进程在同一工作目录中,\dir在 Windows 上的 q 进程中使用,否则您将需要调整文件句柄以指向正确的位置

q)hsym `data.csv
`:data.csv

使用包含内容的文件 data.csv:

id,sym,val
1,APPL,50
2,GOOG,100

运行与您相同的命令,但使用文件句柄:

In:   q.sync('table: ("ISI"; enlist ",") 0: `:data.csv')

或者

In:   q.sync('table: ("ISI"; enlist ",") 0:hsym `qpython.csv')

使用 qpython 检查结果变量:

In:   q.sync('table')
Out:  rec.array([(1, b'APPL',  50), (2, b'GOOG', 100)],
      dtype=[('id', '<i4'), ('sym', 'S4'), ('val', '<i4')])

签入q进程

q)table
id sym  val
-----------
1  APPL 50
2  GOOG 100

推荐阅读