好的,我在這裏使用了古老的數據庫格式,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