PyTables / Numexpr中的字符串比较

时间:2013-10-26 22:28:21

标签: python pytables numexpr

我刚创建并填充了我的第一个PyTables文件。试图查询数据,我遇到了一个问题。有一个ic_name列,其类型为StringCol(500),我已为此列创建了一个索引。以下代码工作正常:

count = 0
for x in f.root.raw.projects:
    if x['ic_name']=="XXX":
        count += 1

之后count的值略高于200.000,这是正确的值。为了加快查询速度,我创建了索引并希望像这样查询:

f.root.raw.projects.where('ic_name == "XXX"')

现在我只收到180个结果!?任何提示可能会发生什么?

1 个答案:

答案 0 :(得分:0)

您没有提供任何测试脚本,因此我不确定这是否适用于您的问题。但我最近遇到了类似的问题。出于某种原因,有时搜索字符串值成功,有时不成功。我的解决方案是在添加任何数据后调用表上的flush()方法(使用您的示例:f.root.raw.projects.flush())。

另一个问题可能是搜索表达式只占用字节而不是字符串。在您的示例中,正确的方法应该是以下之一:

f.root.raw.projects.where('ic_name == b"XXX"')

f.root.raw.projects.where('ic_name == ' + str("XXX".encode()))

f.root.raw.projects.where('ic_name == ' + str("XXX".encode(encoding)))