暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python实例|根据指定字符或者不同字符将Excel表格一列拆分为多列(附源码+限免视频)

638

使用Python开发微软的Excel通常需要使用第三方库,如xlrd、xlwt、xlutils、xlwings、win32com、openpyxl、pandas等,各种第三方库都有自己独特的功能和缺陷,因此在采用这些第三方库之前需要慎重考虑。

如:xlrd只能读取在Excel文件中的数据;xlwt只能在Excel文件中写入数据;xlutils虽然可以读写Excel文件的数据,但是它依赖于xlrd和xlwt;xlwings可以从Excel中调用Python,也可在Python中调用Excel;win32com可以独立读写Excel文件的数据;openpyxl也可以独立读写Excel文件的数据;pandas能够读写在Excel文件中的数据,但是它需要xlrd/xlwt/openpyxl/xlsxwriter等库的配合。

下面介绍两个Python辅助Excel实例,分别是根据指定字符将一列拆分为多列,和根据不同字符将一列拆分为多列。


实例:根据指定字符将一列拆分为多列


01

实例功能


此案例主要通过在while循环中多次使用Python语言的字符串的partition()方法,从而实现在工作表中将包含多个指定字符('-')的一列拆分为多列。当运行此案例的Python代码(A325.py文件)之后,将把“员工表.xlsx”文件的员工表的姓名列拆分为分公司列、部门列、组名列、姓名列,代码运行前后的效果分别如图1和图2所示。


■ 图1

■ 图2


02

实现代码


import openpyxl
myBook=openpyxl.load_workbook('员工表.xlsx',data_only=True)
mySheet=myBook.active
#按行获取员工表(mySheet)的单元格数据(myValues)
myValues=list(mySheet.values)
myNewBook=openpyxl.Workbook()
myNewSheet=myNewBook.active
myNewSheet.title='员工表'
myNewSheet.append(['工号','分公司','部门','组名',
                   '姓名','最高学历','专业','出生年份'])
#从myValues的第2行开始逐行循环(到最后一行)
for myRow in myValues[1:]:
    myList=[]
    #拼接行(myRow)的第1列单元格的数据
    myList+=[myRow[0]]
    #获取行(myRow)的第2列单元格的数据(即将要拆分的字符串)
    myStr=myRow[1]
    #统计字符'-'的个数
    myMax=myStr.count('-')
    myCount=1
    #有多少个指定字符('-')就循环多少次
    while myCount<=myMax:
      #根据指定字符('-')将字符串(myStr)拆分为三个成员
      myParts=list(myStr.partition('-'))
      #在列表(myList)中添加第一个成员
      myList+=[myParts[0]]
      #将包含多个指定字符的第三个成员myParts[2]赋值给myStr,
      #以进行下次循环(即再次拆分)
      myStr=myParts[2]
      #如果是最后一次循环
      if myCount==myMax:
         #则在列表(myList)中添加第三个成员myParts[2]
         myList+=[myParts[2]]
      #累计循环次数
      myCount+=1
    #拼接行(myRow)的第3列及后面的所有单元格数据
    myList+=myRow[2:]
    myNewSheet.append(myList)
myNewBook.save('结果表-员工表.xlsx')


03

代码说明


在上面这段代码中,while循环用于根据指定字符('-')使用partition()方法拆分字符串,例如,字符串“北京分公司-投资部-2组-李松林”包含3个指定字符('-'),因此要循环3次,下面是每次的拆分结果:

此案例的源文件是MyCode\A325\A325.py。


扫码观看讲解视频



实例:根据不同字符将一列拆分为多列


01

实例功能


此案例主要通过使用Python语言的字符串的find()方法,从而实现在工作表中根据指定的不同字符(如'年'、'月'、'日'等)将一列的数据(如'1989年2月18日')拆分到多(三)列中。当运行此案例的Python代码(A320.py文件)之后,将把“员工表.xlsx”文件的员工表的出生日期列拆分为出生年份列、出生月份列、出生日列,代码运行前后的效果分别如图3和图4所示。


■ 图3

■ 图4


02

实现代码



import openpyxl
myBook=openpyxl.load_workbook('员工表.xlsx',data_only=True)
mySheet=myBook.active
#按行获取员工表(mySheet)的单元格数据(myValues)
myValues=list(mySheet.values)
myNewBook=openpyxl.Workbook()
myNewSheet=myNewBook.active
myNewSheet.title='员工表'
myNewSheet.append(['工号','部门','姓名','最高学历',
                   '专业','出生年份','出生月份','出生日'])
#从myValues的第2行开始逐行循环(到最后一行)
for myRow in myValues[1:]:
    myList=[]
    #拼接行(myRow)的第1列到第5列之间的单元格数据
    myList+=myRow[0:5]
    #获取行(myRow)的第6列(出生日期列)的单元格数据
    myDate=myRow[5]
    #查询字符'年'在出生日期字符串(如‘1989年2月18日’)的位置(索引)
    myYearPos=myDate.find('年')
    #获取年份字符串(如‘1989年’)
    myYear=myDate[0:myYearPos+1]
    #查询字符'月'在出生日期字符串的位置(索引)
    myMonthPos=myDate.find('月')
    #获取月份字符串(如‘2月’)
    myMonth=myDate[myYearPos+1:myMonthPos+1]
    #获取出生日字符串(如‘18日’)
    myDay=myDate[myMonthPos+1:]
    #在列表(myList)中添加年份、月份、出生日
    myList+=[myYear,myMonth,myDay]
    myNewSheet.append(myList)
myNewBook.save('结果表-员工表.xlsx')


03

代码说明


在上面这段代码中,myYearPos=myDate.find('年')表示查找字符‘年’在字符串myDate (如'1989年2月18日')的索引位置。myYear=myDate[0:myYearPos+1]表示根据索引位置在字符串myDate中获取子字符串myYear,0表示子字符串的起始位置,myYearPos表示子字符串的结束位置,如'1989年'。

此案例的源文件是MyCode\A320\A320.py。


04

补充说明


阅读和使用本书案例要求读者具备一定的Python语言编程基础和操作Excel的基本常识,关于Python语法基础可以参考Python 基础语法教程(https://www.runoob.com/python/python-basic-syntax.html)。


扫码观看讲解视频



05

源代码下载

关注微信公众号,后台回复关键词 “Python辅助ExcelV081” 即可获得完整源代码。



06

参考书籍

《Python辅助Word+Excel:让办公更高效》

ISBN:9787302592464

作者:罗帅、罗斌

定价:99.8元

扫码优惠购书


347个典型办公场景

问题描述+解决方案+真实源码+效果截图

Python+Word+Excel实现办公自动化,

成倍提高办公效率

优化数据分析,让工作省点力!

告别重复劳动,蜕变职场精英!





文章转载自清华计算机学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论