本项目中虽然数据量不大, 用 Excel 自带的替换功能也能实现, 但是针对上几千条字段去匹配数据的话, Python 就明显高效的多, 现在开始讲解:
要清洗的是 Excel 文档中所有字段的地名,
需要清洗数据:
首先, 需要导入 xlrd 和 re 包, 前者是用来读写 Excel 文档, 后者是正则表达式的包
- #-*- coding:gbk -*-
- import xlrd
- import re
- #打开一个 Excel 表
- data = xlrd.open_workbook(/home/kin/company.xlsx)
- #按顺序选择第 5 张表 (sheet)
- table = data.sheets()[4]
- #循环遍历把表中一列的数据用字符串拼接的形式赋值给字符串变量 temp
- temp = ""
- for x in range(18):
- #get row_value
- var = table.row_values(x)
- temp +=var[0] + "|"
- #一定要去除最后一个 | 字符, 否则 while 循环时会认为空值完全匹配进入死循环
- temp = temp[:-1]
- #新建并打开一个 xlsx 文档, w 是选择复写, 编译码为 utf-8
- file = open("/home/kin/Desktop/z.xlsx","w",encoding="utf-8")
- #选择第二张表
- table2 = data.sheets()[1]
- #编译正则表达式
- pt = re.compile(temp)
- #可以将 num,num2 加入循环, print 查看 num 总数, 判断是否执行总数
- num = 0
- num2 = 0
- #循环遍历
- for x in range(10000):
- #get row_value
- var2 = table2.row_values(x)
- #var2[0] 读取每行第一列元素
- while pt.search(var2[0]):
- #group() 匹配正则表达式整体结果
- a = pt.search(var2[0]).group()
- #将匹配结果用空字符串替代
- var2[0] = var2[0].replace(a,"")
- #将处理完的结果赋值给 name
- name = var2[0]
- #用回车做分隔符写入
- file.write(name + "\n")
- #切记 flush() 方法必须放在 while 循环局部, 不然结果会将所有运算结果从缓存内写入
- file.flush()
- file.close
结果:
来源: http://www.bubuko.com/infodetail-2499562.html