我被赋予了一项艰巨的任务,即从各种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
文件不是新文件的很大一部分。 –伊桑·弗曼(Ethan Furman)16年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
不同,并且dbf
当前无法读取.cdx
文件。
如果需要对表进行排序,则可以创建一个内存索引:
my_index = table.create_index(key=lambda r: r.table_key)
您还可以创建一个完整的功能:
def active(rec):
# do not show deleted records
if is_deleted(rec):
return DoNotIndex
return rec.table_key
my_index = table.create_index(active)
然后遍历索引而不是表:
for record in my_index:
...
关于python - Python DBF:如何将.cdx索引与.dbf表关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50614727/