【发布时间】:2018-05-30 23:40:52
【问题描述】:
我接到了一项模糊的任务,即从各种 Visual FoxPro 表中自动提取数据。
有几对.DBF 和.CDX 文件。使用 Python dbf 包,我似乎能够使用它们。我有两个文件,一个ABC.DBF 和一个ABC.CDX。我可以使用加载表格文件,
>>> 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 author, dbf 可以读取索引:
我可以读取 IDX 文件,但不能更新它们。我的日常工作改变了,dbf 文件不是新文件的很大一部分。 – 伊桑·弗曼 2016 年 5 月 26 日 21:05
阅读是我所要做的。我看到存在四个类,Idx、Index、IndexFile 和 IndexLocation。这些似乎是不错的候选人。
Idx 类读取表和文件名,这是有希望的。
>>> index = dbf.Idx(table, 'ABC.CDX')
不过,我不确定如何使用这个对象。我看到它有一些生成器,backward 和 forward,但是当我尝试使用它们时出现错误
>>> print(list(index.forward()))
dbf.NotFoundError: 'Record 67305477 is not in table ABC.DBF'
如何将.cdx 索引文件关联到.dbf 表?
【问题讨论】:
-
.idx 和 .cdx 是不一样的,并且在其中保留了多个索引“标签”。当 .cdx 与 .dbf 文件同名时,称为“结构索引”并自动更新,在需要时使用。如果你的 dbf 没有做低级别的事情,那么你真的不需要做一些特别的事情。否则也许你可以找到一个通过 OleDb 连接的库(也可以查看 Dabo dev,开发人员来自 VFP 社区)。
标签: python visual-foxpro dbf