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 个结果!?任何暗示这里可能发生了什么?

您没有提供任何测试脚本,所以我不确定这是否适用于您的问题。但我最近遇到了类似的问题。出于某种原因,有时搜索字符串值成功,有时不成功。我的解决方案是在添加任何数据后对表调用 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)))

相关内容

  • 没有找到相关文章

最新更新