🔖 标注数据
本示例演示在 xlsx 中标注问题数据。
✅️ 任务分析
有如下表格文件'data.xlsx'
。
组名 | 组员1 | 组员1手机号 | 组员2 | 组员2手机号 | 组员3 | 组员3手机号 | 组员4 | 组员4手机号 |
---|---|---|---|---|---|---|---|---|
组1 | Carr | 15399626268 | May | 17889274101 | Ryan | 1771776999 | Spring | 17680229660 |
组2 | Werner | 17586201172 | Angela | 18350882480 | Rod | 15906891463 | Adolph | 17177298309 |
组3 | Yvonne | 16655852825 | Wright | 138143952411 | Vera | 17709644527 | Charles | 1477522365 |
组4 | Stanley | 13011426087 | George | 13400371700 | Amanda | 15819868653 | Eugene | 14649665945 |
组5 | Marian | 15057866734 | Wanda | 1377862803 | Tyler | 15757554646 | Susanna | 13603342149 |
组6 | Virgil | 17126029509 | Beatrice | 15384093633 | Herman | 17546976485 | Katherine | 13441013235 |
表格中有几个手机号位数不够,现在要将它们在文件中标注出来。
可以遍历所有手机号,判断其格式,发现错误则将单元格标注为黄色,并将此行首列单元格也标注黄色,方便筛选有问题的行。
✅️ 完整代码
from DrissionRecord import Recorder, CellStyle
黄底 = CellStyle().set_bgColor('yellow') # 创建单元格样式对象并设置底色为黄色
r = Recorder('data.xlsx')
cols = [f'组员{i}手 机号' for i in range(1, 5)] # 生成要检查的单元格列表
for row in r.rows(key_cols=cols): # 遍历所有行
for 表头, 手机号 in row.items(): # 在当前行遍历需要检查的列
if len(str(手机号)) != 11: # 手机号位数不正确
r.add_styles(黄底, row.coord(表头)) # 标注不正确手机号单元格
r.add_styles(黄底, (row.row, 1)) # 标注有不正确手机号的行的首列
r.record()
✅️ 代码解读
📌 key_cols
参数
[f'组员{i}手机号' for i in range(1, 5)]
生成每行要检查的单元格的表头列表:
['组员1手机号', '组员2手机号', '组员3手机号', '组员4手机号', '组员5手机号']
遍历每行的时候,程序只从中获取这些列的数据。
📌 遍历上述列
每行数据是一个dict
,如{'组员1手机号': 15399626268, '组员2手机号': 17889274101, '组员3手机号': 1771776999, '组员4手机号': 17680229660}
。
用items()
获取表头值和手机号进行判断,如果手机号有错,则根据表头进行标注。
📌 标注底色
用add_styles()
对指定单元格设置底色。
因为出错的列号预先是不知道的,不能用(row.row, 'C')
这种格式。
需要用row.coord(表头)
,获取这行表头
变量指向的列的坐标。
另一种写法r.add_styles({表头: 黄底}, row.row)
也可以,效果一样。
最后不要忘记保存r.record()
。
✅️ 执行结果
根据第一列底色筛选出所有包含错误手机号的列: