好吧,我用的是一种古老的数据库格式,dbf文件不要问为什么,只要知道某个软件决定扩展foxpro支持,因为微软决定扩展foxpro支持现在,我得到一个特定文件上的以下错误我已经成功地加载了另一个文件,我想知道这个数据库是否有问题。我相信你可能需要看看数据库来确定,但它的方式是巨大的张贴,所以我会采取我能得到的。

Traceback (most recent call last):
  File "billsapi.py", line 250, in <module>
    x.getUsedGuns()
  File "billsapi.py", line 72, in getUsedGuns
    itemdb = dbf.Dbf('item.dbf', readOnly=True, ignoreErrors=True)
  File "C:\Python27\lib\site-packages\dbfpy\dbf.py", line 135, in __init__
    self.header = self.HeaderClass.fromStream(self.stream)
  File "C:\Python27\lib\site-packages\dbfpy\header.py", line 127, in fromStream
    _fld = fields.lookupFor(_data[11]).fromString(_data, _pos)
  File "C:\Python27\lib\site-packages\dbfpy\fields.py", line 455, in lookupFor
    return _fieldsRegistry[typeCode]
KeyError: '0'

下面是返回此错误的简单代码:
def getUsedGuns(self):
    itemdb = dbf.Dbf('item.dbf', readOnly=True, ignoreErrors=True)

就像我说的,我可以加载其他没有问题的文件,但也许有一个解决这个特定错误的办法?
编辑:我还想指出,该文件可以在dbf view plus中打开、查看和修改。
编辑:找到解决方案。实际上,我最终使用了python dBase模块我想我的主要问题是没有备忘录文件(不管它们是什么,它有一个.fpt文件扩展名)。我现在用的是:
from dbf.tables import VfpTable
itemdb = VfpTable('item.db')
for rec in itemdb:
    print rec['MY_COLUM_NAME']

我还想指出,目前仍在使用FoxPro的任何人都应该被烧死。

最佳答案

你的回溯是dbfpy告诉你你的文件有一个dbfpy字段类型代码不支持的,0。这是一个Visual FoxPro(“VFP”)的东西。
这与备忘录文件无关。是的,如果有备注字段,则它们存储在.FPT文件中。访问foo.fpt时需要出现foo.dbf
你说“我最终使用了python dBase模块”假设您是指ethan furman的dbf模块,根据它的PyPI entry不支持空字段。
我有一个DBF阅读模块(pydbfrw),我一直想发布“有一天”以下是其文档的摘录:

Field Type      Description  DBF variety  Python 2.x type
0 (digit zero)  _NullFlags   VFP          N/A

Notes: This field type is used only for the hidden _NullFlags field which
is a bit mask saying which fields in the record should be interpreted as NULL.

我的模块实现了识别这一点,并在需要时为字段值返回None如果你想要这个模块的副本,找到我的电子邮件地址——例如google(“john machin xlrd”)——给我发电子邮件,我会发给你的。

10-04 13:08