花生他爸 2022-10-27 16:18 采纳率: 33.3%
浏览 72
已结题

python dbfread如何按行读取DBF(包括标记删除的行)

问题遇到的现象和发生背景

python dbfread读取DBF数据,通过records读取未标记删除数据,deleted读取标记删除的数据。
那该如何获取各个数据在DBF中的行号呢?

用代码块功能插入代码,请勿粘贴截图
table = dbfread.DBF('C:\\xxxx.dbf', encoding='GBK', char_decode_errors='ignore', load=True)
print(table.records)
print(table.deleted)
我想要达到的结果

img


想要达到的效果,直接按行获取数据,不论数据是否被标记删除。

问题解决方案

引用文章: https://blog.csdn.net/jhui123456/article/details/108046201

直接使用dbf库操作dbf文件,直接读取所有行数据,可以根据dbf.is_deleted(record)查看当前行是否标记删除

import dbf

dfb_file = 'C:\\\\xxx.dbf'

file = dfb_file
tb = dbf.Table(dfb_file)  # 创建tb实例
# print(tb) # 打印tb信息
titles = dbf.get_fields(file)  # 将表头以列表形式打印出来
print(titles)
tb.open(mode=dbf.READ_WRITE)  # 读写方式打开tb    print('title_name=', title_name)
for record in tb:
    value_list = []
    deleted_status = dbf.is_deleted(record)  # 查看当前行是否标记删除
    print('deleted_status=', deleted_status)
    with record as r:
        for field in record:
            value_list.append(field)
    print('value_list=', value_list)
  • 写回答

3条回答 默认 最新

  • honestman_ 2022-10-27 16:40
    关注

    print(table.records)
    就是一个保存了所有行信息的迭代器,如果要序列号那就按顺序取就好了,方法如下:

    for line_num, data in enumerate(table.records):
        print(line_num)
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月28日
  • 修改了问题 10月28日
  • 赞助了问题酬金15元 10月27日
  • 赞助了问题酬金1元 10月27日
  • 展开全部

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题