I am using an ancient database format here, dbf files. Don't ask why, just know a certain software decided to extend foxpro support because microsoft decided to extend foxpro support. Now, I'm getting the following error on a specific file. I have successfully loaded another file and I'm curious if there is something wrong with this database. I'm sure you probably need to look at the database to determine that, but its way to huge to post so I'll take what I can get.
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'
And heres my simple code that is returning this error:
def getUsedGuns(self):
itemdb = dbf.Dbf('item.dbf', readOnly=True, ignoreErrors=True)
Like I said, I can load other files with out a problem but maybe there is a work around for this specific error?
EDIT: I'd also like to point out that the file can be opened and viewed and modified in DBF View Plus.
Your traceback is dbfpy's way of telling you that your file has an unsupported-by-dbfpy field type code, 0
. It's a Visual FoxPro ("VFP") thing.
This is nothing to do with memo files. Yes, if there are memo fields, they are stored in a .FPT
file. foo.fpt
needs to be present when you access foo.dbf
.
You say """I actually ended up using the python dBase module""" ... presumably you mean Ethan Furman's dbf
module, which according to its PyPI entry doesn't support null fields.
I have a DBF reading module (pydbfrw
) which I've been meaning to release "one of these days". Here's an extract from its docs:
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.
My module implements recognising that and returning None
for a field value where required. If you would like a copy of the module, find my e-mail address -- e.g. google("john machin xlrd") -- e-mail me and I'll send it to you.