本项目中虽然数据量不大,用Excel自带的替换功能也能实现,但是针对上几千条字段去匹配数据的话,Python就明显高效的多,现在开始讲解:
要清洗的是Excel文档中所有字段的地名,
需要清洗数据:
首先,需要导入xlrd和re包,前者是用来读写Excel文档,后者是正则表达式的包
1 #-*- coding:gbk -*- 2 import xlrd 3 import re 4 5 #打开一个Excel表 6 data = xlrd.open_workbook(‘/home/kin/company.xlsx‘) 7 8 #按顺序选择第5张表(sheet) 9 table = data.sheets()[4] 10 11 #循环遍历把表中一列的数据用字符串拼接的形式赋值给字符串变量“temp” 12 temp = "" 13 for x in range(18): 14 #get row_value 15 var = table.row_values(x) 16 temp +=var[0] + "|" 17 18 19 #一定要去除最后一个“|”字符,否则while循环时会认为“空值”完全匹配进入死循环 20 temp = temp[:-1] 21 22 #新建并打开一个xlsx文档,“w”是选择复写,编译码为utf-8 23 file = open("/home/kin/Desktop/z.xlsx","w",encoding="utf-8") 24 25 #选择第二张表 26 table2 = data.sheets()[1] 27 28 #编译正则表达式 29 pt = re.compile(temp) 30 31 32 #可以将num,num2加入循环,print查看num总数,判断是否执行总数 33 num = 0 34 num2 = 0 35 36 #循环遍历 37 for x in range(10000): 38 #get row_value 39 var2 = table2.row_values(x) 40 #var2[0]读取每行第一列元素 41 while pt.search(var2[0]): 42 #group()匹配正则表达式整体结果 43 a = pt.search(var2[0]).group() 44 #将匹配结果用空字符串替代 45 var2[0] = var2[0].replace(a,"") 46 #将处理完的结果赋值给name 47 name = var2[0] 48 #用回车做分隔符写入 49 file.write(name + "\\n") 50 #切记flush()方法必须放在while循环局部,不然结果会将所有运算结果从缓存内写入 51 file.flush() 52 53 file.close 54
结果: