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
相关产品推荐
相关产品推荐

