Python xlrd xlwt读写文档

工具分析
pandas,numpy,虽然功能强大,但需要重新定义excel,效率低。
xlutils,xlrd(read only),xlwt(write only,需要创建新工作表)
xutils可实现读写切换,对读取包重新编码,但影响原三方包(xlrd)函数调用,xlwt读写功能有限。最终采用改后逻辑。
openpyxl:直接读写excel文档,可直接修改数据,可能会影响原数据。

邮箱处理代码思路

1.打开文档-工作表 xlrd
2.获取最大行数 max_rows
3.提取需要匹配的第n列每行数据 re.match,column_value
4.每个数据(for loop)与正则表达式匹配,匹配则True,不匹配则False
5.将匹配结果写入第n+1列,修改原表或建立新表 xlwt

套用了re邮箱匹配正则表达式,逻辑如下


"""
Created on Mon Mar 18 08:58:24 2019

@author: viola
"""

import xlrd
import xlwt
import re

ExcelFile=xlrd.open_workbook(r'C:\Users\test example.xlsx')
#获取目标EXCEL文件
sheet = ExcelFile.sheets()[0]
#xlrd通过索引打开工作表

mail_format = r'^[a-zA-Z0-9]([a-zA-Z0-9]*[-_\.]?[a-zA-Z0-9]+)@[a-zA-Z0-9]([a-zA-Z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$'
#邮箱匹配正则表达式,该版本要求过于严苛
#修改版 mail_format = r‘^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,4})$’

result_1=[]
for email_1 in sheet.col_values(4):
    if re.match(mail_format,email_1):
        result_1.append('True')
    else:
        result_1.append('False')

print(result_1)
#Python console已显示结果



ExcelFile_write = xlwt.Workbook(encoding = 'ascii')
NewFile = ExcelFile_write.add_sheet('My Worksheet')
for i in range(len(result_1)):
    NewFile.write(i,0,result_1[i])

ExcelFile_write.save('检验结果.xls')
#写入新表

Demo:利用random函数随机生成手机号码,利用在线邮箱随机生成器模拟数据,demo包含与原表相同数目变量,行数约600。

工作内容:收集csdn邮箱正则表达式,结合本文档数据结构,编写re邮箱正则表达。
邮箱处理逻辑:读取原工作表数据,匹配第N列,新增第N+1列存储匹配结果,直接写入原文档。
个人电脑:在demo试运行脚本,匹配结果质量满分,但针对大量数据库可能过于严苛。
改:读取原表数据,匹配结果存入新表。(不影响原数据)
第一版re正则表达式运行后,发现大量邮箱值大小写字母混合,进行预处理:利用excel lower()函数将邮箱字段全部置换成小写字母。

你可能感兴趣的:(Python)