【问题标题】:Opening and searching dBase III (DBF) databases in Python在 Python 中打开和搜索 dBase III (DBF) 数据库
【发布时间】:2012-12-10 02:52:11
【问题描述】:

我希望在 python 中开发一个需要搜索 dBase III 数据库文件 (DBF) 的应用程序。我一直在寻找一段时间,但我找不到任何关于如何做到这一点的好文档。我试过使用 DBFpy,但找不到任何关于如何索引/搜索列的文档。我也尝试遵循this thread 中的建议,但显然我的 DBF 文件已“关闭”。我查看了电话listed here,但无法确定如何“打开”文件。任何人都可以推荐一个 python 模块来处理带有文档的 DBF 文件,或者指导我如何正确使用其他 DBF python 模块。谢谢!

【问题讨论】:

  • 刚刚确定如何打开数据库文件......我很愚蠢,但它是'table.open()'

标签: python dbf


【解决方案1】:

使用my dbf module 的基本流程类似于:

import dbf

some_table = dbf.Table('/path/to/table.dbf')  # table is closed
some_table.open()
index = some_table.create_index(record_indexer)
.
.
.
records = index.search(match=(some_value,))   # returns a dbf.List of matching records

record_indexer是一个返回相应索引值的函数;它可以像

一样简单
lambda rec: rec.desired_field

或根据您的需要复杂:

def record_indexer(record):
    if record.that_field == 'bad value':
        return dbf.DoNotIndex             # record is ignored
    return record.this_field, record.other

【讨论】:

  • 非常感谢您的详细回复。在“record_indexer”中,我应该将“desired_field”设置为数据库中的列标题,对吗?据我所知,我的数据库中的选项是 MEM_ID、MEM_NAME、EXPIRED、STATE……当我输入命令“index = some_table.create_index(lambda rec: rec.MEM_ID)”时,我发现了一个 dbf.FieldMissingError :'MEM_ID:表中没有这样的字段'。有没有办法使用您的 dbf 模块列出可用字段。再次感谢您的宝贵时间。
  • @StanleySwitalski:这周我会尝试收集一些像样的文档。所有字段名都是小写的,你想要rec.mem_idtable.field_names 返回所有字段的列表; print table 以人类可读的格式提供所有元数据; table.structure() 返回一个适合创建另一个相同表的列表。
  • 非常感谢。因为我正在使用 Mac 并且这个数据库非常大,所以我从来没有机会正确打开 DBF。相反,我在 Excel 中打开它,它显示了所有大写的列名。这就是为什么我认为它应该全部大写。这对我来说是一个很大的障碍。
  • 感谢您的回答。我一直在挠头,试图弄清楚为什么桌子是“关闭”的......
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
相关资源
最近更新 更多