故事提要:

有个运营的朋友, 6张excel 表需要合并到一张表, 每张表大约65536 个数据, 其中重复的item 需要按一定规则合并。

如果用电脑直接合并excel , 由于数据过多, 系统总是崩溃, 朋友试了很多方法一周也没完美搞定。

正好帮个忙,拿来用python练练手~

比如下面两个重复的数据:

合并后的结果是:

pwk_id :不变,   访问次数: 1+1 = 2  ,   操作系统: PC  ,  总计访问时长:565 + 565 = 1130 , pv:   max(2,2) = 2

Do it now:

两小时时间边学边实践写了个简单的python程序, 帮他生成一下合并结果。以后也能用,妈妈再也不用担心我们的数据重复的问题了。

使用经典python 2.7.10   工具库  xlwt  + xlrd

下面是所有程序源代码:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import xlwt

import xlrd

import os

# 需要合并的文件目录

dir = '/Users/jesselu/Desktop/excels/'

files = os.listdir(dir)

files = map(lambda path:os.path.join(dir,path),files)

print files

# book1 = xlrd.open_workbook(file,"rd")

def generateResult(files):

def printSheetInfo(book):

print "表单数量", book.nsheets

print "表单名称", book.sheet_names()

sheet0 = book.sheet_by_index(0)

print u"表单%s 共 %d 行 %d 列" % (book.sheet_names()[0], sheet0.nrows, sheet0.ncols)

def mergeRow(old, new):

old[1].value = old[1].value + new[1].value

old[3].value = old[3].value + new[3].value

old[4].value = max(old[4].value, new[4].value)

return old

resultDict = {}

# 合并重复项

for path in files:

book = xlrd.open_workbook(path, "rd")

printSheetInfo(book)

for sheet in book.sheets():

for r in range(sheet.nrows):

row = sheet.row(r)

old_row = resultDict.get(row[0].value, -1)

if old_row < 0:

resultDict[row[0].value] = row

else:

resultDict[row[0].value] = mergeRow(old_row, row)

return resultDict

def write(resultDict):

wb = xlwt.Workbook(encoding='utf-8')

def writeRow(sheet, rowNum, data):

sheet.write(rowNum,0, data[0].value)

sheet.write(rowNum, 1, data[1].value)

sheet.write(rowNum, 2, data[2].value)

sheet.write(rowNum, 3, data[3].value)

sheet.write(rowNum, 4, data[4].value)

def writeHeader(sheet):

sheet.write(0,0,'pwk_id')

sheet.write(0,1,'访问次数')

sheet.write(0, 2, '操作系统')

sheet.write(0, 3, '总计访问时长')

sheet.write(0, 4, 'pv')

sheetId = 0

row_num = 0

resultSheet = wb.add_sheet('mergedSheet', cell_overwrite_ok=True)

writeHeader(resultSheet)

for d, x in resultDict.items():

row_num = row_num + 1

if row_num % 65535 == 0:

sheetId = sheetId + 1

resultSheet = wb.add_sheet(str.format('mergedSheet{}',sheetId), cell_overwrite_ok=True)

writeHeader(resultSheet)

row_num = 0

else:

writeRow(resultSheet,row_num, x)

wb.save('/Users/jesselu/Desktop/excels/result.xls')

if __name__ == "__main__":

write(generateResult(files))

结果:

修改路径之后和处理逻辑后直接可用, 大约1分钟, 合并万6张表, 去掉重复数据4万多个。

感悟:

python 练手项目, “人生苦短,早用python”

参考资料:

python excel 社区官方文档

python合并excel相同元素的不同数据,python 合并多张excel 处理重复数据相关推荐

  1. python做表格真的快吗_厉害!一百多张Excel表用Python竟然不到3秒就处理完了?

    案例背景 在另一个平行世界,有一家专注于户外运动的巨头公司.既然是巨头,为了更加亲切,我们就叫他大头吧.大头的旗下有20个品牌,这些品牌涉及到128个类目(细分行业),涉及范围之广令人咋舌,可谓遍地开 ...

  2. python对大量数据去重_Python对多属性的重复数据去重实例

    python中的pandas模块中对重复数据去重步骤: 1)利用DataFrame中的duplicated方法返回一个布尔型的Series,显示各行是否有重复行,没有重复行显示为FALSE,有重复行显 ...

  3. excel删除重复数据保留一条_Excel一键删除重复数据,你居然还用逐条排查?

    平时用Excel表格处理大量数据的时候,总会遇到大量的重复无效数据. 如果只有几十条数据,也就罢了,一条一条比对,很快也能清理完,可是如果数据多达上百条,甚至成千上万条,还是去一条一条筛选,那得排查到 ...

  4. Java对比两张Excel表的数据,java对比两个excel或者一张excel和数据库的一张表的数据是否相同,两张excel表格匹配相同的数据库...

    excel自动从数据库匹配相应的数据 vlookup函数:vlookup(lookup_value,table_array,col_index_num,[range_lookup]) 第一个:look ...

  5. 办公软件使用学习笔记:excel第三节。excel快速录入数据,常见输入快捷方法,重复数据快速输入,数据从文本中简单导入。

    excel数据快速输入 数据快速输入快捷键. Tab键:横向向右切换一个单元格. Enter键:向下切换一个单元格. 上下左右四个切换选中的单元格. 日期输入问题:日期只识别2020/1/12或202 ...

  6. c++删除数组中重复元素_PG13中的功能—B树索引中的重复数据删除

    PostgreSQL 13 Beta 1版本于2020年5月21日发布,PostgreSQL 13 Beta 2版本于2020年6月25日发布.虽然Beta 版本中依旧包含一些错误,但是它总是几乎涵盖 ...

  7. oracle删除表中数据_Excel工作表中,删除重复数据的2种方法解读,高效且实用!...

    在实际的工作中,经常要对工作表中重复的数据进行删除,如若数据行只有几条,则可通过人工查找出来,如若数据行较多,这种方法就费时费力,而且容易出错,造成对表格数据的准确性和个人能力的怀疑--今天,小编给大 ...

  8. c datatable导入mysql_《项目经验》–简单三层使用DataTable向数据库表批量导入数据—向SqlServer一张表中导入数据 | 学步园...

    向数据库的一张表中添加数据,可以采用单个添加,即一条数据.一条数据的添加:也可以采用批量导入,依次将好些条数据写入数据库的一张表中.文本借助实例<添加系列信息>讲解一种向数据库批量导入数据 ...

  9. sql重复数据取日期小的_excel快速查询重复数据的3个小技巧

    在大量的数据当中怎么快速的查询数据是否有重复,并进行删除.方法有以下几种,通过菜单栏查询删除重复值,用vlookup查询删除重复值以及countif查询删除重复值. 1.菜单栏查询&删除重复数 ...

  10. mysql怎么查找删除重复数据_Mysql中如何查找并删除重复数据

    考试系统中做了一个用户导入试题功能,导致用户导入了很多重复的试题,我需要查询及删除一下重复的记录,于是有了这篇文章. (一)单个字段 1.查找表中多余的重复记录,根据(question_title)字 ...

最新文章

  1. JSP中base href=%=basePath%的作用
  2. eclipse开发javaweb项目中The superclass javax.servlet.http.HttpServlet was not found on the Java Build
  3. macOS/MacBook Air设置使用iCloud的APP
  4. 《Servlet学习笔记》Servlet开发细节-线程安全
  5. 2020国货品牌力发展报告
  6. 程序员看不起事业单位员工:一年收入才4万?网友:40岁再比一比,究竟谁更牛逼!!
  7. 机器学习 | 算法笔记- 集成学习(Ensemble Learning)
  8. CentOS安装MySql报错:mysql error: Failed dependencies
  9. java string date_Java基础教程:Java之Object类,Objects类,Date类概念及使用!
  10. C语言实现的简易FTP客户端
  11. win7美化_笔记本怎么外接显示器?附Windows效率加倍/桌面美化实用技巧
  12. IE代理服务器没有响应 浏览器无法打开网页解决方法
  13. python win32gui使用_python win32 简单操作
  14. 终端常用的命令及功能
  15. css3 3d头像,创意css3头像展示_觉唯设计
  16. 理论+实操 :部署YUM仓库以及NFS资源共享服务————理论讲解
  17. 敦煌研究院吴健部长一行来我司调研“十三五”国家重点研发计划子课题进展
  18. 关于iOS中图片处理的小结
  19. hbw-utils - 基本数据类型的toString()实现
  20. 关于pc页面在手机屏幕显示不全

热门文章

  1. github 这个网站到底是干嘛用的?
  2. 融合计费账务系统架构与核心功能的研究与实现
  3. Android Studio 期末大作业(英语app)[免费开源]
  4. 直接转矩系统和矢量控制系统
  5. oracle+并非所有变量,ORA-01008:并非所有变量都已绑定异常错误汇总解决方案
  6. 每天学点数据库之-----Day 1-数据库的一些基本概念
  7. 智能优化算法(Ga,PSO,SA)高度模块化(可直接调用)python实现
  8. io.minio.errors.ErrorResponseException: The request signature we calculated does not match the signa
  9. 2023考研初试时间临近,考前焦虑怎么缓解?
  10. CCF认证 2020-9 称检测点查询