python-xlwt&pandas组合使用-20200915

import os,xlwt
import pandas as pd
import selectUsecols as su
import mergeExcel as me
import mergeEXCEL1 as mee

workbook = xlwt.Workbook(encoding = 'ascii')
worksheet = workbook.add_sheet('My Worksheet',cell_overwrite_ok=True)
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = '宋体'
worksheet.write(0,0,'工作序列',style)
worksheet.write(0,1,'参与人姓名',style)

workbook1 = xlwt.Workbook(encoding = 'ascii')
worksheet1 = workbook1.add_sheet('My Worksheet',cell_overwrite_ok=True)
style1 = xlwt.XFStyle() # 初始化样式
font1 = xlwt.Font() # 为样式创建字体
font1.name = '宋体'
worksheet1.write(0,0,'日期',style)
worksheet1.write(0,1,'每天工时',style)




file_name=r'C:\Users\caoming\Desktop\20200914数据处理'
excel_name='test1.xls'
excel_name1='test2.xls'
test1=os.path.join(file_name,excel_name)
test2=os.path.join(file_name,excel_name1)
data1=pd.read_excel(test1)
data2=pd.read_excel(test2)
canyuren=su.hee(test1,[1])
os.makedirs(file_name + '\\nameFenBiao')#创建文件夹
os.makedirs(file_name + '\\zhongjian')#创建文件夹
os.makedirs(file_name + '\\last')#创建文件夹

for name in canyuren:
    name_list1=data1[data1['参与人姓名']==name]#将表1中的内容按照姓名分表取出df
    name_list2=data2[data2['参与人姓名']==name]#将表2中的内容按照姓名分表取出df
    write1=pd.ExcelWriter(file_name+'\\'+name+'1'+'.xls')
    write2 = pd.ExcelWriter(file_name+'\\'+name+'2'+'.xls')
    name_list1.to_excel(write1,index=False)
    name_list2.to_excel(write2, index=False)
    write1.save()#按照名字分表
    write1.close()
    write2.save()#按照名字分表
    write2.close()
    yuefen=su.hee(write1,[3])
    dada1 = pd.read_excel(write1)
    dada2 = pd.read_excel(write2)
    os.makedirs(file_name + '\\nameFenBiao\\'+ name)#创建文件夹
    os.makedirs(file_name + '\\zhongjian\\' + name)#创建文件夹
    for yue in yuefen:
        yuefen_list1 = dada1[dada1['月份'] == yue]
        yuefen_list2 = dada2[dada2['年月'] == yue]
        write3 = pd.ExcelWriter(file_name + '\\' +name+ yue + '1' + '.xls')
        write4 = pd.ExcelWriter(file_name + '\\' + name+ yue + '2' + '.xls')
        yuefen_list1.to_excel(write3, index=False)
        yuefen_list2.to_excel(write4, index=False)
        write3.save()#按照月份分表
        write3.close()
        write4.save()#按照月份分表
        write4.close()
        os.makedirs(file_name + '\\nameFenBiao\\'+ name+'\\'+ yue)#创建文件夹
        bbb1=yuefen_list1.values.tolist()
        bbb2=yuefen_list2.values.tolist()
        n=len(bbb1)
        n1=len(bbb2)

        for i in range(n):
            renri=bbb1[i][2]
            for tian in range(renri):
                worksheet.write(tian+1, 0, bbb1[i][0], style)
                worksheet.write(tian+1, 1, bbb1[i][1], style)


                workbook.save(file_name + '\\nameFenBiao\\'+ name+'\\'+ yue +'\\'+ str(i) + '.xls')
            me.hlo(file_name + '\\nameFenBiao\\' + name + '\\' + yue,
                   file_name + '\\nameFenBiao\\' + name + '\\' + yue + '\\' + '合成' + '.xls')
            os.remove(file_name + '\\nameFenBiao\\' + name + '\\' + yue + '\\' + str(i) + '.xls')
            for tian1 in range(renri):
                worksheet.write(tian1+1, 0, None)
                worksheet.write(tian1+1, 1, None)
                # worksheet.write(tian+1, 2, bbb2[tian][1])合成
                # worksheet.write(tian+1, 3, bbb2[tian][2])

        for nn in range(n1):
            worksheet1.write(nn+1, 0, bbb2[nn][1], style)
            worksheet1.write(nn+1, 1, bbb2[nn][2], style)
            workbook1.save(file_name + '\\nameFenBiao\\'+ name+'\\'+ yue +'\\' + '合成1' + '.xls')
        for nn in range(n1):
            worksheet1.write(nn+1, 0, None)
            worksheet1.write(nn+1, 1, None)

        mee.hlo(file_name + '\\nameFenBiao\\' + name + '\\' + yue ,file_name + '\\zhongjian\\'+ name+ '\\'  + yue  + '合成2' + '.xls')

        me.hlo(file_name + '\\' +'zhongjian'+ '\\'+ name,file_name+ '\\'+'last'+'\\' + name+ '.xls')


        os.remove(write3)
        os.remove(write4)

    os.remove(write1)
    os.remove(write2)

此代码用到的函数如下:
(1)selectUsecols,去重

import pandas as pd
def hee(path,b:[int]):
    wb=pd.read_excel(path,usecols=b)
    wbb=wb.values.tolist()
    result=[]
    for bbb in wbb:
        result.append(bbb[0])
        # print(set(result))
    # bbb=pd.unique(result)
    bbb=list(set(result))
    return bbb

(2)mergeExcel 纵向合成excel

import os
import pandas as pd
import numpy as np
def hlo(path,path1):
    dir = path#设置工作路径
    #新建列表,存放文件名(可以忽略,但是为了做的过程能心里有数,先放上)
    filename_excel = []
    #新建列表,存放每个文件数据框(每一个excel读取后存放在数据框)
    frames = []
    for root, dirs, files in os.walk(dir):#os.walk(dir)在目录树中游走输出在目录中的文件名,, 返回的是一个三元组(root,dirs,files)
        # root所指的是当前正在遍历的这个文件夹的本身的地址
        # dirs是一个list ,内容是该文件夹中所有的目录的名字(不包括子目录)
        # files同样是list, 内容是该文件夹中所有的文件(不包括子目录)
        for file in files:
            #print(os.path.join(root,file))
            filename_excel.append(os.path.join(root,file))#os.path.join连接括号内的两个路径
            df = pd.read_excel(os.path.join(root,file)) #excel转换成DataFrame
            frames.append(df)
     #合并所有数据
    result = pd.concat(frames,axis=0)
    #查看合并后的数据
    bb=result.head()
    cc=result.shape
    result.to_excel(path1,index = False)#保存合并的数据到电脑D盘的merge文件夹中,并把合并后的文件命名为a12.csv

(3)mergeEXCEL1 横向合成excel

import os
import pandas as pd
import numpy as np
def hlo(path,path1):
    dir = path#设置工作路径
    #新建列表,存放文件名(可以忽略,但是为了做的过程能心里有数,先放上)
    filename_excel = []
    #新建列表,存放每个文件数据框(每一个excel读取后存放在数据框)
    frames = []
    for root, dirs, files in os.walk(dir):#os.walk(dir)在目录树中游走输出在目录中的文件名,, 返回的是一个三元组(root,dirs,files)
        # root所指的是当前正在遍历的这个文件夹的本身的地址
        # dirs是一个list ,内容是该文件夹中所有的目录的名字(不包括子目录)
        # files同样是list, 内容是该文件夹中所有的文件(不包括子目录)
        for file in files:
            #print(os.path.join(root,file))
            filename_excel.append(os.path.join(root,file))#os.path.join连接括号内的两个路径
            df = pd.read_excel(os.path.join(root,file)) #excel转换成DataFrame
            frames.append(df)
     #合并所有数据
    result = pd.concat(frames,axis=1)
    #查看合并后的数据
    bb=result.head()
    cc=result.shape
    result.to_excel(path1,index = False)#保存合并的数据到电脑D盘的merge文件夹中,并把合并后的文件命名为a12.csv
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值