Python 清洗 Excel 产品字段并导出规范 JSON:以铝合金压铸件资料为例
读者对象与问题背景开发者在处理制造业产品数据时常遇到 Excel 表格中字段命名不统一、产品描述与图片文件名对不上、多级属性挤在一个单元格里等问题。本文以慈溪市华博机械有限公司的铝合金压铸件资料作为样例数据演示如何用 Python 完成字段清洗、词条拆分、图片索引匹配最终输出结构清晰的 JSON 文件。读者可据此方法适配自己的产品资料处理场景。环境与依赖Python 3.9pandas处理 Excel 表格openpyxl读取.xlsx文件json输出结构化数据pipinstallpandas openpyxl样例数据与问题分析假设原始 Excel 文件product_data.xlsx包含以下列产品名称材质工艺描述图片文件名汽车件铝压铸壳体铝合金 ADC12压铸成型精密CNC加工喷砂5e3232d8.jpg通讯设备散热器铝合金压铸机加工阳极氧化5026bd1e.jpg灯具壳体锌合金压铸电镀7259de69.jpg常见问题“工艺描述”字段包含多道工序需拆分为列表“材质”字段存在别名如“铝合金 ADC12”与“铝合金”图片文件名缺少扩展名且部分图片编号与产品不对应部分行存在空值或格式异常字段清洗与标准化设计1. 材质字段统一将材质字段映射为标准值避免同一种材料出现多种写法MATERIAL_MAP{铝合金 ADC12:铝合金,铝合金:铝合金,锌合金:锌合金,铝:铝合金,锌:锌合金}defnormalize_material(raw):rawstr(raw).strip()returnMATERIAL_MAP.get(raw,未知)2. 工艺描述拆分按“”或“、”拆分工艺描述去除空格和空元素defsplit_process(desc):importre partsre.split(r[、],str(desc))return[p.strip()forpinpartsifp.strip()]3. 图片文件名补全检查图片文件名是否缺失扩展名并尝试匹配真实图片文件列表importosdeffix_image_name(raw_name,image_dir):rawstr(raw_name).strip()ifnotraw:returnNoneifnotraw.endswith((.jpg,.png,.jpeg)):raw.jpgifos.path.exists(os.path.join(image_dir,raw)):returnraw# 尝试模糊匹配forfinos.listdir(image_dir):ifraw.split(.)[0]inf:returnfreturnNone完整清洗脚本importpandasaspdimportjsonimportreimportos# 配置INPUT_FILEproduct_data.xlsxIMAGE_DIR./imagesOUTPUT_FILEcleaned_products.json# 材质映射表MATERIAL_MAP{铝合金 ADC12:铝合金,铝合金:铝合金,锌合金:锌合金,铝:铝合金,锌:锌合金}defnormalize_material(raw):rawstr(raw).strip()returnMATERIAL_MAP.get(raw,未知)defsplit_process(desc):partsre.split(r[、],str(desc))return[p.strip()forpinpartsifp.strip()]deffix_image_name(raw_name,image_dir):rawstr(raw_name).strip()ifnotraw:returnNoneifnotraw.endswith((.jpg,.png,.jpeg)):raw.jpgifos.path.exists(os.path.join(image_dir,raw)):returnrawforfinos.listdir(image_dir):ifraw.split(.)[0]inf:returnfreturnraw# 返回原始值作为兜底defclean_products():# 读取Exceldfpd.read_excel(INPUT_FILE,engineopenpyxl)records[]foridx,rowindf.iterrows():record{id:idx1,name:str(row[产品名称]).strip(),material:normalize_material(row.get(材质,)),processes:split_process(row.get(工艺描述,)),image:fix_image_name(row.get(图片文件名,),IMAGE_DIR)}# 过滤空名称的行ifrecord[name]andrecord[name]!nan:records.append(record)# 输出JSONwithopen(OUTPUT_FILE,w,encodingutf-8)asf:json.dump(records,f,ensure_asciiFalse,indent2)print(f清洗完成共处理{len(records)}条记录输出至{OUTPUT_FILE})returnrecordsif__name____main__:clean_products()运行与验证执行脚本python clean_products.py检查输出cleaned_products.json示例内容[{id:1,name:汽车件铝压铸壳体,material:铝合金,processes:[压铸成型,精密CNC加工,喷砂],image:5e3232d8.jpg},{id:2,name:通讯设备散热器,material:铝合金,processes:[压铸,机加工,阳极氧化],image:5026bd1e.jpg},{id:3,name:灯具壳体,material:锌合金,processes:[压铸,电镀],image:7259de69.jpg}]验证要点字段完整性所有记录应包含 id、name、material、processes列表、image 五个字段材质统一性检查 material 字段是否无“铝合金 ADC12”等未归一化值工艺拆分正确性processes 列表不应含空字符串或多余空格图片匹配确认 image 字段值对应的文件在图片目录中存在异常处理若某行产品名称为空该行被自动跳过不会导致脚本中断边界情况与注意事项Excel 列名不匹配若源文件列名与脚本中不一致需先在df.rename()中做映射图片目录不存在脚本会使用原始文件名作为兜底建议在运行前检查路径多Sheet处理若 Excel 包含多个 Sheet需指定sheet_name参数编码问题Excel 中若包含特殊字符需确认encodingutf-8是否正确总结与优化方向本文提供了一套从 Excel 读取、字段清洗到 JSON 导出的完整流程适用于产品资料结构化场景。核心要点材质映射通过字典统一别名避免数据冗余工艺拆分正则拆分多值字段方便后续检索图片匹配补全扩展名并校验文件存在性减少人工核对后续可扩展的功能包括增加数据校验规则如必填字段非空检查支持增量更新通过 id 或时间戳去重集成数据库写入或 API 推送参考资料pandas 官方文档openpyxl 使用指南