You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.8中如何写入或追加dbf文件列?AttributeError报错如何解决?

问题诱因
  • 库功能不匹配:你代码中初始化table用的是dbfread库的DBF类,这个库仅支持读取dbf文件,没有写入、追加相关的接口,调用append自然会抛出属性不存在的错误。
  • 调用逻辑错误:即使使用支持写入的dbf库,append是用于追加整行记录的方法,需要传入表所有必填字段的键值对,不能直接传入单个字段的内容。
正确实现方案

直接使用dbf库即可完成读写操作,无需引入dbfread,根据你的实际需求对应两种实现场景:

场景1:给已有的某条记录的SERIAL_NUM字段写入新值

import dbf

# 打开dbf文件,指定读写模式
table = dbf.Table('C://Users//e833519//Desktop//VALIDATE.dbf')
table.open(mode=dbf.READ_WRITE)

entry_val = self.entry.get()
self.result = ""
# 先校验输入长度
if len(entry_val) < 11 or len(entry_val) > 12:
    self.result = "snIncorect"
else:
    for record in table:
        if record['SERIAL_NUM'] == entry_val:
            self.result = "Compass"
            break
    else:
        # 循环正常结束未触发break,说明没有匹配到记录
        self.result = "notCompass"

if self.result == "notCompass" and self.verificareSiIntroducereCompass.get():
    # 示例:给最后一条记录的SERIAL_NUM字段赋值,可根据实际需求修改对应行
    with table.last_record as rec:
        rec.SERIAL_NUM = entry_val

# 操作完成后关闭表
table.close()

场景2:追加一条全新的记录到dbf文件末尾

如果你的需求是新增完整行记录,使用如下写法:

# 前面的校验逻辑不变
if self.result == "notCompass" and self.verificareSiIntroducereCompass.get():
    # append传入的字典需要包含表所有必填字段的键值对,此处仅示例SERIAL_NUM字段,其他字段按需补充
    table.append({
        "SERIAL_NUM": entry_val,
        # "其他字段名": 对应值
    })

# 操作完成后关闭表
table.close()

内容的提问来源于stack exchange,提问作者Ionescu R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:36:03