好的,我在这里使用了古老的数据库格式,dbf文件。不要问为什么,只知道某个软件决定扩展foxpro支持,因为微软决定扩展foxpro支持。现在,我在特定的文件上收到以下错误。我已经成功加载了另一个文件,我很好奇这个数据库是否有问题。我相信你可能需要查看数据库来确定,但它的方式是巨大的发布,所以我会采取我能得到的。Python dbfpy和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? – 2011-03-11 18:46:48
它的版本2.2.5与Python 2。7 – 2011-03-11 19:12:39
供参考:备注文件包含任何其列声明MEMO类型的字段。备注列可以存储非常大的任意长度的字符串。由于普通表文件('* .dbf')包含固定宽度的记录,所以备注字段不太适合。因此,他们以自己的格式获得自己的文件。 – 2011-03-11 21:24:11