Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python dbf库读取和创建新的FoxPro 2.6数据库表_Python_Python 3.x_Foxpro_Dbf - Fatal编程技术网

如何使用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()

@Ethan Furman你能帮我吗?它似乎弄乱了标题,因为第一个字节是0x00,与任何DBF版本都不对应。我还尝试了一种解决方法,创建带有备注字段的表格,并使用
表格。delete_fields
在打开后删除备注字段,这不会引起任何错误,但标题仍然混乱,因为第一个字节是0x01(也没有DBF版本的对应关系)。查看它。。。