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

使用Ethan Furman的Python dbf库转csv时如何替换修剪单字段值?

解决方法

你可以在读取DBF记录的同时完成字段清洗,直接写入CSV文件,单步完成所有转换操作,无需二次处理输出的CSV。修改后的代码如下:

import csv
import dbf
import os
import sys

folder = sys.argv[1]

for dirpath, dirnames, filenames in os.walk(folder):
    for filename in filenames:
        if filename.upper().endswith('.DBF'):
            # 拼接完整路径,支持子目录文件读写
            dbf_path = os.path.join(dirpath, filename)
            # 使用with上下文管理器自动关闭表
            with dbf.Table(dbf_path, ignore_memos=True) as db:
                db.open()
                csv_path = os.path.join(dirpath, f"{filename[:-4]}.csv")
                # 打开CSV文件写入
                with open(csv_path, 'w', encoding='utf-8', newline='') as csv_f:
                    writer = csv.writer(csv_f)
                    # 写入表头
                    writer.writerow(db.field_names)
                    # 逐行处理记录
                    for record in db:
                        processed_record = []
                        for field, value in zip(db.fields, record):
                            # 处理字符型字段:全空格替换为空
                            if field.type == 'C':
                                if isinstance(value, str) and value.strip() == '':
                                    processed_record.append('')
                                else:
                                    processed_record.append(value if value is not None else '')
                            # 处理日期型字段:00000000替换为空
                            elif field.type == 'D':
                                if str(value) == '00000000':
                                    processed_record.append('')
                                else:
                                    processed_record.append(value if value is not None else '')
                            # 其他类型字段直接保留
                            else:
                                processed_record.append(value if value is not None else '')
                        writer.writerow(processed_record)

代码调整说明

  • 补充了路径拼接逻辑,支持遍历子文件夹内的所有DBF文件,避免原代码找不到文件的问题
  • 新增了字段清洗逻辑,完全匹配你提出的两条处理规则
  • 增加了空值兼容处理,避免特殊字段值导致的写入异常
  • 使用with上下文管理器自动管理文件/表的开闭,资源释放更安全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03