使用Python拆分Excel数值与单位并计算偏差存入指定列的实现方法
Excel数值单位拆分与偏差计算实现方案
你现有的正则只能匹配整数格式的数值,遇到带小数点、数值与单位间带空格的场景会拆分异常,我们先优化正则匹配规则,再完成完整流程实现。
import openpyxl import re # 数值+单位拆分正则,支持小数、数值单位间带空格的场景 split_pattern = re.compile(r'^([\d.]+)\s*([A-Za-z]+)$') def split_value_unit(cell_value): """拆分单元格的数值和单位,返回(浮点数值, 单位),拆分失败返回(None, None)""" if not cell_value: return None, None match_res = split_pattern.match(str(cell_value).strip()) if match_res: val = float(match_res.group(1)) unit = match_res.group(2) return val, unit return None, None # 1. 加载Excel文件,替换为你的实际文件路径 wb = openpyxl.load_workbook('你的输入文件.xlsx') ws = wb.active # 如需指定工作表可替换为:wb['工作表名称'] # 2. 写入结果列表头 ws['D1'] = 'Deviation' ws['E1'] = 'Units' # 3. 遍历数据行,从第2行开始跳过表头 for row in range(2, ws.max_row + 1): # 读取预期值、实际值单元格内容 expected_cell = ws[f'B{row}'].value actual_cell = ws[f'C{row}'].value # 拆分数值和单位 exp_val, exp_unit = split_value_unit(expected_cell) act_val, act_unit = split_value_unit(actual_cell) # 处理格式异常场景 if exp_val is None or act_val is None: ws[f'D{row}'] = '数据格式异常' ws[f'E{row}'] = '格式异常' continue # 校验两行单位一致性 if exp_unit != act_unit: ws[f'D{row}'] = '单位不匹配' ws[f'E{row}'] = f'{exp_unit}/{act_unit}不匹配' continue # 计算偏差并写入结果 ws[f'D{row}'] = exp_val - act_val ws[f'E{row}'] = exp_unit # 4. 保存处理后的文件,替换为你要输出的路径 wb.save('处理后的结果.xlsx')
注意事项
- 若你的数据包含负数值,可以把正则修改为
r'^([-\d.]+)\s*([A-Za-z]+)$'即可支持负数匹配 - 你可以根据实际需求调整异常场景的提示内容,也可以选择跳过异常行不写入数据
- 如果B、C列的单位本身就允许不一致,可以去掉单位校验逻辑,自行选择取预期值/实际值的单位存入E列
内容的提问来源于stack exchange,提问作者Software
相关产品推荐
相关产品推荐

