如何使用Python dbf库读取和创建新的FoxPro 2.6数据库表
库版本:如何使用Python dbf库读取和创建新的FoxPro 2.6数据库表,python,python-3.x,foxpro,dbf,Python,Python 3.x,Foxpro,Dbf,库版本:dbf0.97.0,python版本3.5.5 我正在尝试使用DBF库创建一个新的foxpro2.6.DBF文件。我跑 >>> import dbf >>> table = dbf.Table('test', 'TEST C(40); TEST2 N(3,0); TEST3 C(3)', dbf_type='fp') >>> table.open(mode=dbf.READ_WRITE) Traceb
dbf0.97.0
,python版本3.5.5
我正在尝试使用DBF
库创建一个新的foxpro2.6.DBF
文件。我跑
>>> import dbf
>>> table = dbf.Table('test', 'TEST C(40); TEST2 N(3,0); TEST3 C(3)', dbf_type='fp')
>>> table.open(mode=dbf.READ_WRITE)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "...\Miniconda3\envs\myenv\lib\site-packages\dbf\__init__.py", line 5793, in open
raise DbfError("Unsupported dbf type: %s [%x]" % (version_map.get(header.version, 'Unknown: %s' % header.version), header.version))
dbf.DbfError: Unsupported dbf type: Unknown: 0 [0]
导入dbf
>>>table=dbf.table('test','testc(40);test2n(3,0);test3c(3'),dbf_type='fp'))
>>>table.open(模式=dbf.READ\u WRITE)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“…\Miniconda3\envs\myenv\lib\site packages\dbf\\uuuuu init\uuuuuu.py”,第5793行,处于打开状态
raise DbfError(“不支持的dbf类型:%s[%x]”%(版本映射.get(header.version,'未知:%s'%header.version',header.version))
dbf.DbfError:不支持的dbf类型:未知:0[0]
当我第二次运行open时,它似乎还可以:
>>> table.open(mode=dbf.READ_WRITE)
dbf.Table('test.dbf', status=<DbfStatus.READ_WRITE: 2>)
表.打开(模式=dbf.READ\u WRITE)
表('test.dbf',status=)
但是,当我尝试将一些数据写入表时,它会被卡住:
>>> table.append(("Lorem ipsum", 123, "321"))
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "...\Miniconda3\envs\myenv\lib\site-packages\dbf\__init__.py", line 5516, in append
newrecord = Record(recnum=header.record_count, layout=meta, kamikaze=kamikaze)
File "...\Miniconda3\envs\myenv\lib\site-packages\dbf\__init__.py", line 2773, in __new__
record._update_disk()
File "...\Miniconda3\envs\myenv\lib\site-packages\dbf\__init__.py", line 3100, in _update_disk
layout.dfd.seek(location)
ValueError: seek of closed file
附加表((“Lorem ipsum”,123,“321”))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“…\Miniconda3\envs\myenv\lib\site packages\dbf\\uuuuu init\uuuuuuu.py”,第5516行,在附录中
newrecord=Record(recnum=header.Record\u count,layout=meta,kamikaze=kamikaze)
文件“…\Miniconda3\envs\myenv\lib\site packages\dbf\\ uuuuu init\ uuuuu.py”,第2773行,在新文件中__
记录。_更新_磁盘()
文件“…\Miniconda3\envs\myenv\lib\site packages\dbf\\ uuuuuu init\uuuuuuuuu.py”,第3100行,在更新磁盘中
布局.dfd.seek(位置)
ValueError:查找已关闭的文件
如果我向表中添加一个备注字段,它将打开(我不必调用它两次)并正确追加
这是一个bug还是我只是做错了什么?快速回答:升级到
0.97.2。
详细回答:没有备忘录的
'fp'
表格的标题创建中有一个错误,现在已经修复了
注意:dbf.Table
返回表已关闭
;但是,某些命令会自动为您打开和关闭表格:
语句with
dbf.Processing()
dbf.add_fields()
dbf.delete_fields()
dbf.rename\u field()
表格。delete_fields
在打开后删除备注字段,这不会引起任何错误,但标题仍然混乱,因为第一个字节是0x01(也没有DBF版本的对应关系)。查看它。。。