python从零开始--32 python解决工作小问题之 处理Excel的重复数据

问题:老婆需要处理一个Excel表,有四千多行数据,如下;其中“型号规格”有很多重复的,需要将重复项进行合并,生成一个新的简洁的表。“带娃做作业”和“帮我合并表”,我得选一样,看了看娃那副调皮样,我速速决定处理Excel。谁说处理Excel一定要用眼睛一条条对,这不学了python么,干这点小活应该没啥问题。

python从零开始--32 python解决工作小问题之 处理Excel的重复数据_第1张图片


思路:

1. 先上网查了查python里如何处理excel,查到有专门的模块xlrd和xlwt可用。 xlrd是读excel, xlwt是写excel库的。

2. 看了看别人写的例子,基本就明白怎么玩这两个模块了,读取的步骤就是:

         a) 打开文件

         b) 获取所有的sheet

         c)通过名称或索引获取某张sheet

         d)根据index,获取整行、整列或给定单元格的值,

    写的步骤就是:

        a)在内存中创建一个excel对象

        b)在该excel对象中添加一张sheet

        c)按给定逻辑往单元格中写入数据

        d)将excel对象save到硬盘上

代码如下:

import xlrd
import xlwt

# 用xlrd打开待处理的excel文件,读取待处理的数据
xlsfile = r"D:\pythonProjects\practise\excelTest\Book1.xlsx"
book = xlrd.open_workbook(xlsfile) # 获取Excel文件的book对象

# sheet0 = book.sheet_by_index(0) # 通过sheet索引获得sheet对象
# nrows = sheet0.nrows # 获取需要处理的数据的行数

sheet_name = book.sheet_names()[0] # 尝试通过sheet名字来获取,当然如果知道sheet名字就可以直接指定
sheet1 = book.sheet_by_name(sheet_name)
nrows = sheet1.nrows # 获取需要处理的数据的行数

# 用xlwt创建一个excel对象,并初始化第一行的数据,为写入数据做准备
book_new = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet_new = book_new.add_sheet("sheet1", cell_overwrite_ok=True)
sheet_new.write(0, 0, "型号规格")
sheet_new.write(0, 1, "数量")
line = 1 #后面自动写入的数据从第二行开始


# 处理逻辑, calc list用来记录行是否已经处理过的标志,先将所有待处理的行初始为“待处理”的标志
calc = []
for k in range(1,nrows+1): # 第一行是列名,无须处理
    calc.append(False)     # False表示对应的行未被处理过

# 读取数据进行合并处理,并写入xlwt创建的对象中
for i in range(1,nrows):
    if calc[i] == False:  # False表示对应的行未被处理过相加过,True表示已相加过,跳过这条数据
        totol_i = sheet1.row_values(i)[1]  # 获取该行型号的初始数量

        for j in range(i+1, nrows):
            if sheet1.row_values(i)[0] == sheet1.row_values(j)[0]: #表示查到了同型号规格的数据
                totol_i += sheet1.row_values(j)[1]
                calc[j] = True #将第j列标志为已处理

        #将计算的值写入新建的sheet_new
        sheet_new.write(line, 0, sheet1.row_values(i)[0])
        sheet_new.write(line, 1, totol_i)
        line += 1

# 处理完毕,保存到桌面
book_new.save(r'C:\Users\pansc\Desktop\book1.xls')

相关excel文档:

https://download.csdn.net/download/pansc2004/10428856

https://download.csdn.net/download/pansc2004/10428849




你可能感兴趣的:(python从零开始--32 python解决工作小问题之 处理Excel的重复数据)