gpt4 book ai didi

python - 用python高效读取foxpro DBF

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:12 24 4
gpt4 key购买 nike

我已经尝试了两个模块来读取工作正常的 dbf 文件(dbf 和 dbfpy),但我必须逐条记录地读取数据库以查找内容。这对于大型数据库来说真的很慢。是否有任何模块可以处理查询表或使用 CDX 索引?

最佳答案

我不相信 dbfpy 支持索引文件,而且我知道 dbf 不支持。

但是,在 dbf 中,您可以创建一个临时索引,然后进行查询:

big_table = dbf.Table('/path/to/some/big_table')
def criteria(record):
"index the table using these fields"
return record.income, record.age
index = big_table.create_index(key=criteria)

index 现在可以迭代或搜索以返回所有匹配的记录:

for record in index.search(match=(50000, 30)):
print record

示例表:

table = dbf.Table('tempu', 'name C(25); age N(3,0); income N(7,0);')
table.open()
for name, age, income in (
('Daniel', 33, 55000),
('Mike', 59, 125000),
('Sally', 33, 77000),
('Cathy', 41, 50000),
('Bob', 19, 22000),
('Lisa', 19, 25000),
('Nancy', 27, 50000),
('Oscar', 41, 50000),
('Peter', 41, 62000),
('Tanya', 33, 125000),
):
table.append((name, age, income))

index = table.create_index(lambda rec: (rec.age, rec.income))

还有一些方法可以搜索范围的开始和结束:

# all the incomes of those who are 33
for rec in index.search(match=(33,), partial=True):
print repr(rec)
print
# all the incomes of those between the ages of 40 - 59, inclusive
start = index.index_search(match=(40, ), nearest=True)
end = index.index_search(match=(60, ), nearest=True)
for rec in index[start:end]:
print repr(rec)

打印:

Daniel                    33  55000
Sally 33 77000
Tanya 33 125000

Cathy 41 50000
Oscar 41 50000
Peter 41 62000
Mike 59 125000

关于python - 用python高效读取foxpro DBF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com