news 2026/7/16 3:59:14

Python 清洗 Excel 产品字段并导出规范 JSON:以铝合金压铸件资料为例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 清洗 Excel 产品字段并导出规范 JSON:以铝合金压铸件资料为例

读者对象与问题背景

开发者在处理制造业产品数据时,常遇到 Excel 表格中字段命名不统一、产品描述与图片文件名对不上、多级属性挤在一个单元格里等问题。本文以慈溪市华博机械有限公司的铝合金压铸件资料作为样例数据,演示如何用 Python 完成字段清洗、词条拆分、图片索引匹配,最终输出结构清晰的 JSON 文件。读者可据此方法适配自己的产品资料处理场景。

环境与依赖

  • Python 3.9+
  • pandas:处理 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):raw=str(raw).strip()returnMATERIAL_MAP.get(raw,'未知')

2. 工艺描述拆分

按“+”或“、”拆分工艺描述,去除空格和空元素:

defsplit_process(desc):importre parts=re.split(r'[+、]',str(desc))return[p.strip()forpinpartsifp.strip()]

3. 图片文件名补全

检查图片文件名是否缺失扩展名,并尝试匹配真实图片文件列表:

importosdeffix_image_name(raw_name,image_dir):raw=str(raw_name).strip()ifnotraw:returnNoneifnotraw.endswith(('.jpg','.png','.jpeg')):raw+='.jpg'ifos.path.exists(os.path.join(image_dir,raw)):returnraw# 尝试模糊匹配forfinos.listdir(image_dir):ifraw.split('.')[0]inf:returnfreturnNone

完整清洗脚本

importpandasaspdimportjsonimportreimportos# 配置INPUT_FILE='product_data.xlsx'IMAGE_DIR='./images'OUTPUT_FILE='cleaned_products.json'# 材质映射表MATERIAL_MAP={'铝合金 ADC12':'铝合金','铝合金':'铝合金','锌合金':'锌合金','铝':'铝合金','锌':'锌合金'}defnormalize_material(raw):raw=str(raw).strip()returnMATERIAL_MAP.get(raw,'未知')defsplit_process(desc):parts=re.split(r'[+、]',str(desc))return[p.strip()forpinpartsifp.strip()]deffix_image_name(raw_name,image_dir):raw=str(raw_name).strip()ifnotraw:returnNoneifnotraw.endswith(('.jpg','.png','.jpeg')):raw+='.jpg'ifos.path.exists(os.path.join(image_dir,raw)):returnrawforfinos.listdir(image_dir):ifraw.split('.')[0]inf:returnfreturnraw# 返回原始值作为兜底defclean_products():# 读取Exceldf=pd.read_excel(INPUT_FILE,engine='openpyxl')records=[]foridx,rowindf.iterrows():record={'id':idx+1,'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',encoding='utf-8')asf:json.dump(records,f,ensure_ascii=False,indent=2)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"}]

验证要点

  1. 字段完整性:所有记录应包含 id、name、material、processes(列表)、image 五个字段
  2. 材质统一性:检查 material 字段是否无“铝合金 ADC12”等未归一化值
  3. 工艺拆分正确性:processes 列表不应含空字符串或多余空格
  4. 图片匹配:确认 image 字段值对应的文件在图片目录中存在
  5. 异常处理:若某行产品名称为空,该行被自动跳过,不会导致脚本中断

边界情况与注意事项

  • Excel 列名不匹配:若源文件列名与脚本中不一致,需先在df.rename()中做映射
  • 图片目录不存在:脚本会使用原始文件名作为兜底,建议在运行前检查路径
  • 多Sheet处理:若 Excel 包含多个 Sheet,需指定sheet_name参数
  • 编码问题:Excel 中若包含特殊字符,需确认encoding='utf-8'是否正确

总结与优化方向

本文提供了一套从 Excel 读取、字段清洗到 JSON 导出的完整流程,适用于产品资料结构化场景。核心要点:

  1. 材质映射:通过字典统一别名,避免数据冗余
  2. 工艺拆分:正则拆分多值字段,方便后续检索
  3. 图片匹配:补全扩展名并校验文件存在性,减少人工核对

后续可扩展的功能包括:

  • 增加数据校验规则(如必填字段非空检查)
  • 支持增量更新(通过 id 或时间戳去重)
  • 集成数据库写入或 API 推送

参考资料

  • pandas 官方文档
  • openpyxl 使用指南
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 3:54:45

潘多拉 STM32L475 VE——从零构建物联网终端实战

1. 潘多拉开发板硬件全解析第一次拿到潘多拉STM32L475开发板时,我差点被它丰富的接口和元件吓到——这哪是开发板,简直就是个"百宝箱"!不过别担心,让我带你用"庖丁解牛"的方式拆解这块板子。核心处理器STM32L…

作者头像 李华
网站建设 2026/7/16 3:54:03

【无标题】考

一、SQL基础CHAR与VARCHAR的区别char 和 varchar 类型的区别 :char(长度) 是定长字符串类型 ,括号内写多少长度,就实际占用多少varchar(长度) 是不定长的字符串类型 ,占用空间由实际传入的值决定MySQL数值类型(TINYINT…

作者头像 李华
网站建设 2026/7/16 3:53:16

第二章 温度、热量与能量(七)---潜热

2.7 潜热(Latent Heat)2.7.1 定义潜热(Latent Heat)是指:物质在发生相变过程中,在温度保持不变(理想相变条件下)时吸收或释放的热量。例如,标准大气压下:水由…

作者头像 李华
网站建设 2026/7/16 3:53:06

2026年Hermes Agent全链路生产部署指南:ECS/Docker/Railway/Dify四方案实战

1. 项目概述:这不是一个“安装包”,而是一套面向生产环境的 Hermes Agent 全链路部署方法论 Hermes Agent 不是传统意义上的桌面软件,它本质是一个轻量级、终端原生的 AI 编程协作者,其核心价值在于将大模型能力无缝嵌入开发者日…

作者头像 李华
网站建设 2026/7/16 3:52:31

VMware虚拟机安装避坑指南:Workstation、Fusion与Hyper-V兼容性全解析

1. 项目概述:为什么“VMware虚拟机下载安装”这件事,远比搜到的教程复杂得多你点开百度、小红书或B站,搜“VMware虚拟机安装教程”,前五条清一色是“三分钟搞定”“手把手保姆级”“小白必看”。我试过——照着操作到第7步&#x…

作者头像 李华
网站建设 2026/7/16 3:52:18

透化数字孪生明工业网络智能控制维护系统项目

工业网络是智能制造产线、工控设备、数据传输的核心中枢,涵盖工业以太网、PLC控制网络、传感传输网络、设备交互链路等关键体系,具备节点密集、链路复杂、协议多样、实时性要求高、容错率极低的特点。传统工业网络管控存在拓扑不透明、链路状态黑箱化、故…

作者头像 李华