需求描述:将一个excel文件按照某一列字段拆分成多个文件。比如将图一表格按照专业拆分成人力资源管理、会计、市场营销3个文件,并以专业名称命名文件名。效果见图二。

功能实现:主要利用groupby函数。

图一:

图二:

 


#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件    :SplitByMajor.py
@说明    :python之按照excel某列字段将一个文件拆分成多个文件。
@时间    :2020/10/21 21:03:18
@作者    :侃侃
@版本    :3.8
'''
import pandas as pd 
import os

#按照文件所包含的专业新建不同专业的工作表
def creatfilebymajor(filepath,filename):  
    scoresinfo=pd.read_excel(filepath,dtype=str)
    
    #获取专业列所有数值,包括重复的
    majors=scoresinfo['专业']
    
    #获取去重后的专业并转化为list方便读取数据,set函数是一个无序不重复的元素集,list为[],set为{}
    nmajors=list(set(majors))
    
    #获取专业的个数,即需要创建工作表的个数
    filenums=len(nmajors)

    #根据专业数量,创建对应个数的工作表,工作表的名称以专业命名
    for i in range(0,filenums,1): 
       majorpath=filepath.replace(filename,"")+list(nmajors)[i]+".xlsx"
       df=pd.DataFrame()
       df.to_excel(majorpath)

def splitbymajor(filepath,filename):#filepath="C:\\Users\\lenovo\\Desktop\\test\\scores.xlsx"这里必须双斜杠 ,filename="scores.xlsx"

    #1、创建各专业文件
    creatfilebymajor(filepath,filename)
    scores=pd.read_excel(filepath,dtype=str)#一张表读出来为dataframe类型
    grouped=scores.groupby("专业")#按照专业分组
    majors=scores['专业']#获取专业列所有数值,包括重复的
    nmajors=list(set(majors))#获取去重后的专业并转化为list方便读取数据,set函数是一个无序不重复的元素集,list为[],set为{}
    #2、分别将各专业从分组后的集合中取出.get_group("专业名称"),然后专业名称与文件名称比对,配对后写入对应专业文件
    dir=filepath.replace("\\"+filename,"")#获取文件所在的根目录,即文件夹目录
    for i in range(0,len(nmajors),1):
        major=grouped.get_group(nmajors[i])
        #遍历文件夹下面的所有文件
        for root_dir,sub_dir,files in os.walk(r'' + dir):#遍历目录下的根目录,子目录,所有文件
            # 对文件列表中的每一个文件进行处理,如果文件名字是以‘xlxs’结尾就
            # 认定为是一个excel文件,当然这里还可以用其他手段判断,比如你的excel
            # 文件名中均包含‘res’,那么if条件可以改写为
            # if file.endswith('xlsx') and 'res' in file:
            for file in files:
                if file==nmajors[i]+'.xlsx':
                   major.to_excel(filepath.replace(filename,"")+nmajors[i]+".xlsx",index=False)


filepath="E:\\MJC\\工具资料\\微信公众号\\20201021\\test.xls"
filename="test.xls"
splitbymajor(filepath,filename)

 

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐