其实第三方库pandas已经实现了这个功能, 但是为啥我还要自己重新写一个方法呢, 用过pandas你就会发现, 虽然可以去重, 但是最左边会莫名其妙多出一列序号, 好像这个去重方法还必须要传入去重列的字段名, 不能按列号去重, 最烦的是当对身份证号码去重时, 新生成的excel中身份证号码列竟变成了科学计数法....可能我是没有掌握pandas去重的要领吧, 算了, 自己动手造个轮子吧! 直接上代码:
import openpyxl
wb = openpyxl.load_workbook('C:/Users/Administrator/Desktop/a.xlsx')
ws = wb.worksheets[0]
print(ws.max_row)
ws.append(['a', 'b'])
def drop_duplicates(column):
lst2 = []
for i in range(1, ws.max_row):
lst1 = list(ws.rows)[i - 1]
for row in list(ws.rows)[i:]:
lst2.append(row[column].value)
if lst1[column].value in lst2:
lst2 = []
continue
else:
ws.append([r.value for r in lst1])
lst2 = []
# 身份证格式化处理, 带表头的处理
def format_cardid(column):
for index, row in enumerate(list(ws.rows)[1:]):
if 'x' in row[column].value:
ws.cell(index + 2, column + 1, row[column].value.replace('x', 'X'))
# 身份证格式化处理, 不带表头的处理
def format_cardid(column):
for index, row in enumerate(list(ws.rows)):
if 'x' in row[column].value:
ws.cell(index + 1, column + 1, row[column].value.replace('x', 'X'))
drop_duplicates(6)
wb.save('C:/Users/Administrator/Desktop/a.xlsx')
简单解释一下, 同样需要引用openpyxl包, 这里我用了和pandas里一样的函数名称, 传入要去重的列号即可, 注意:当身份证号码中存在x大小写时, 你需要统一, 否则不能去重, 在代码里我又加上了处理身份证格式化的代码, 把x统一格式化为X