首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python DBF:如何将.cdx索引与.dbf表相关联

Python DBF:如何将.cdx索引与.dbf表相关联
EN

Stack Overflow用户
提问于 2018-05-31 07:40:52
回答 1查看 1.2K关注 0票数 3

我被赋予了一个不明确的任务,那就是从各种可视化FoxPro表中自动提取数据。

有几对.DBF.CDX文件。使用Python dbf包,我似乎能够使用它们。我有两个文件,一个是ABC.DBF,一个是ABC.CDX。我可以使用以下命令加载表文件:

代码语言:javascript
复制
>>> import dbf
>>> table = dbf.Table('ABC.DBF')
>>> print(table[3])
  0 - table_key : '\x00\x00\x04'
  1 - field_1   : -1
  2 - field_2   : 0
  3 - field_3   : 34
  4 - field_ 4  : 2
  ...

>>>

我的理解是.cdx文件是索引。我怀疑这与table_key字段相对应。According to the authordbf可以读取索引:

我可以读取IDX文件,但不能更新它们。我的日常工作改变了,dbf文件在新的工作中不是很大的一部分。-伊森·福尔曼5月26日,16:05

阅读是我所需要做的一切。我看到有四个类:IdxIndexIndexFileIndexLocation。这些似乎是很好的候选者。

Idx类读入一个表和文件名,这是很有前途的。

代码语言:javascript
复制
>>> index = dbf.Idx(table, 'ABC.CDX')

不过,我不确定如何使用这个对象。我看到它有一些生成器,backwardforward,但是当我尝试使用它们时,我得到一个错误

代码语言:javascript
复制
>>> print(list(index.forward()))
dbf.NotFoundError: 'Record 67305477 is not in table ABC.DBF'

如何将.cdx索引文件与.dbf表相关联?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 08:19:41

.idx.cdx不同,dbf当前无法读取.cdx文件。

如果需要对表进行排序,可以创建一个内存中的索引:

代码语言:javascript
复制
my_index = table.create_index(key=lambda r: r.table_key)

您还可以创建一个完整的函数:

代码语言:javascript
复制
def active(rec):
    # do not show deleted records
    if is_deleted(rec):
        return DoNotIndex
    return rec.table_key

my_index = table.create_index(active)

然后循环遍历索引而不是表:

代码语言:javascript
复制
for record in my_index:
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50614727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档