需求描述:
在python---合并两个excel表格内容 中,对两个表格直接合并,忽略了重复值和缺失值。现要求如下
1.xlsx 2.xlsx
对“1.xlsx”中重复姓名的项记录,在“2.xlsx”中,没有“1.xlsx”中的【小阳】项,对该缺失项也记录,结果重现如下,表格依次为“合并.csv”、“重复.csv”、“缺失.csv”:
合并.csv 重复.csv 缺失.csv
解决方法:
# -*- coding:utf8 -*-
# excel 表格中存在重名的两个人,筛选重名后再合并
# xlrd模块主要用于读取Excel
import xlrd as xl
import os
import re
# 过滤重复的人,并保存到txt文件里
def filterDumplicatedEm(fileName="", sheetName="Sheet1"):
# 打开fileName表格
xls_file = xl.open_workbook(fileName) # 打开文件
xls_sheet = xls_file.sheet_by_name(sheetName) # 通过工作簿名称获
cv0 = xls_sheet.col_values(0) # 第一列所有的值
cv1 = xls_sheet.col_values(1) # 第二列所有的值
cv2 = xls_sheet.col_values(2) # 第三列所有的值
# 打开2.xlsx
xls_file2 = xl.open_workbook("2.xlsx") # 打开文件
xls_sheet2 = xls_file2.sheet_by_name(sheetName) # 通过工作簿名称获
sheet2cv0 = xls_sheet2.col_values(0) # 第一列所有的值
sheet2cv1 = xls_sheet2.col_values(1) # 第二列所有的值
for index, nameItem in enumerate(cv0):
# 重复的人
if cv0.count(nameItem) > 1:
with open("重复.csv", "a+") as f:
f.writelines(
[nameItem, ",", cv1[index], ",", cv2[index], "\n"])
# 没有重复的人
else:
# 找到了匹配的人
if nameItem in sheet2cv0:
tmpIndex = sheet2cv0.index(nameItem)
with open("合并.csv", "a+", encoding="utf-8") as f:
f.writelines(
[nameItem, ",", cv1[index], ",", cv2[index], ",", sheet2cv1[tmpIndex], "\n"])
else:
# 找到缺失的人
with open("缺失.csv", "a+") as f:
f.writelines(
[nameItem, ",", cv1[index], ",", cv2[index], "\n"])
if __name__ == '__main__':
filterDumplicatedEm("1.xlsx")