如何优化Python脚本将DBF类数值列转为CSV字符串并保留前导零?
解决DBF转CSV时保留带前导零字符串字段的问题
问题场景
需求:将包含类数值数据的DBF文件转换为CSV文件,要求对应列以字符串格式保留原始内容(含前导零)。
- DBF文件中
NUMBER字段定义为NUMBER,C,12,原始存储内容:584413 079711 478293 000865 - 使用基于dbfread的Python脚本转换后,CSV中
NUMBER列出现异常:NUMBER, ... "584413,0", ... "79711,0", ... "478293,0", ... "865,0", ... - 预期输出:
NUMBER, ... 584413, ... 079711, ... 478293, ... 000865, ...
问题原因
dbfread库默认会对看起来像数值的字符型字段做自动类型转换,将其解析为包含整数和小数部分的元组(如(79711, 0)),写入CSV时会被格式化为带引号的"79711,0",同时前导零丢失。
优化后的脚本
import csv from dbfread import DBF def dbf_to_csv(dbf_table_pth): # 生成CSV文件名,路径与DBF一致,仅替换后缀 csv_fn = dbf_table_pth[:-4] + ".csv" # 初始化DBF对象,raw=True强制读取原始字符串,禁用自动类型转换 table = DBF(dbf_table_pth, raw=True) with open(csv_fn, 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f, dialect='excel') # 写入列名 writer.writerow(table.field_names) # 逐行写入原始字段值 for record in table: writer.writerow(list(record.values())) return csv_fn
关键改动说明
- 补充导入
csv模块(原脚本遗漏该依赖) - 初始化
DBF对象时添加raw=True参数,强制读取字段的原始字符串内容,避免自动类型转换 - 写入CSV时直接使用原始字符串值,确保保留前导零和原始格式
内容的提问来源于stack exchange,提问作者vo7na8
相关产品推荐
相关产品推荐

