python:实现办公自动化-将文件生成excel表格

本来想接着写关于web的东西,不过老师突然留了个作业,就是将几百条word上面的数据转化成表格的形式.
但是很尴尬的是…我居然不会用word…
不过,咱们好歹也是学过python的人,写一个这样的脚本很简单.

一.处理的数据的示例

首先需要的数据是这样的:
在这里插入图片描述
要求是将后面的数据转化成第一行的表格.如图.
在这里插入图片描述

二.脚本的构思

首先,我们要将数据全部复制到一个新建的txt文件中.虽然python可以直接读取word文档,但是终究没有直接读取txt文件来的舒服.如图,这是我复制到txt文档以后的东西.
data.txt
在这里插入图片描述
数据大概要有400多个.接着我们要想,如何处理这个数据?
我先拿一行数据举例.

1.将两行数据规范成一行

假如我们的数据十分整齐,并且每一行都按照某个字符进行分割,之后在使用python里面的pyopenxl模块就可以添加到表格里了.
因此,我们首先要对数据进行一下规范.如图,我们的最终目的就是将每一条数据规范成这样的形式.
在这里插入图片描述
对比原来的数据:
在这里插入图片描述

将原来分两行的数据规范成一行.
想一想,该怎么做呢?
很简单,我们读取这个文件,然后在读取的时候将第一行结尾的换行(’\n’)替换成空字符(’’)不就行了么?
于是我们便得到了第一张图片的效果:
在这里插入图片描述

2.去掉多余的换行

观察我们的数据:
在这里插入图片描述
我们会发现第一条数据和第二条数据多了一个让人难受的换行符.我们得想办法去掉.
当然,我们只拿一行数据举例.
我们的最终目的是这样的:
在这里插入图片描述
是为了消除数据一和数据二之间的回车
.原理也很简单,就是在读取到第一个数据的最后一行的时候,把回车(’\n’)换成(’’)空字符就行了.

3.处理多条数据

我们学会了将一行数据进行处理,但是我们有将近400条数据,改怎么处理呢?
相信有人已经想到了,那就是写一个循环,然后进行计算,先这样,在那样不就行了么?
(原谅我懒的写了哈哈哈哈.后面我直接写代码你们就明白了)

三.代码的实现

对于数据我相信大部分人已经分析清楚了,所以我就将代码对应上面的每一步来进行实现.

1.对文件进行读写

代码如下

f=open("data.txt","r")
list=f.readlines()

原理就不用说了吧?首先用读的方式打开文件,然后用readlines函数将文件内容按照行写成一个列表.
开始我其实想用c来做这个脚本,但是c实现的话太麻烦了,光文件读写就得写十几行,所以还不如python来的快.

2.处理数据

这个就是比较核心的地方了.先上代码,然后我会解释.

new_list=[]
#这个空列表是下面要用的,我们的数据处理完就放在这个列表里面.
for number in range(0,len(list),3):
    list[number]=list[number].replace("\n","")
    list[number+1]=list[number+1].replace("\n","")
    if len(list)!=1487:
        str=list[number]+list[number+1]+list[number+2]
        new_list.append(str)
    else:
        str=list[number]+list[number+1]
        new_list.append(str)
1.循环

先解释一下为什么循环要写成这样.

for number in range(0,len(list),3):

因为观察数据:
在这里插入图片描述
发现我们一个数据占用的是三行,我们要对这三行数据进行处理,我们的len(list)代表我们刚刚读取的数据,因此我们要让循环一次增长三行,这样就代表我们读取完一条数据了.

2.换行符的处理
    list[number]=list[number].replace("\n","")
    list[number+1]=list[number+1].replace("\n","")

这段代码是使用了replace函数,第一个参数是取代前的字符,第二个参数是取代后的字符,也就是我们刚才提到的是空字符.
number变量用来记录行数的.
第一段代码,因为我们一次性读取的是三行,所以每次的三行的第一行都是我们图中的数据:
在这里插入图片描述
所以,我们用replace直接替换最后的回车就行了.
第二段代码同理.也是直接处理就行了.

3.条件判断
    if len(list)!=1487:
        str=list[number]+list[number+1]+list[number+2]
        new_list.append(str)
    else:
        str=list[number]+list[number+1]
        new_list.append(str)

为啥会有1487这个数字呢?是因为总共数据就有1487行.
在这里插入图片描述
我们对列表的操作是一次性跳3行,所以如果不在最后面加一个判断的话,会因为数字递增超过列表最大长度而错误.
而else的这样写是因为我们最后1486行仅仅处理两行数据就行了,所以我就写成了这样.
当然,记得要提前要写一个空列表,否则append函数是无法用的.

4.将数据写到一个新建的excel表格中

这个就需要使用我们的openpyxl模块了.没有的同学去网上搜一下怎么安装.我就直接上代码了,详细的解释我加在了注释里头.

import openpyxl
#导入模块
workbook=openpyxl.Workbook()
#新建一个工作薄
sheet=workbook.active
sheet.title="数据表"
sheet['A1']="序号"
sheet['B1']="业务类型"
sheet['C1']="通话起始时间"
sheet['D1']="通话时长"
sheet['E1']="呼叫类型"
sheet['F1']="对方号码"
sheet['G1']="本机通话地"
sheet['H1']="对方归属地"
sheet['I1']="通话类型"
sheet['J1']="通话费"
sheet['K1']="其他费"
sheet['L1']="小计"
#在对应的行添加对应要求的内容

这段代码放在开头.中间放开始那些代码.
然后在最后,添加下面的代码:

for i in new_list:
    i=i.split(",")
    #按照逗号进行分割数据
    sheet.append([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[7],i[8],i[9],i[10]])
    #将分割好的数据添加到excel表格中
workbook.save("话单数据.xlsx")
#保存数据

关于openpyxl模块我就不详细讲解了,有兴趣的同学可以百度一下.

5.完整代码
import openpyxl
workbook=openpyxl.Workbook()
sheet=workbook.active
sheet.title="数据表"
sheet['A1']="序号"
sheet['B1']="业务类型"
sheet['C1']="通话起始时间"
sheet['D1']="通话时长"
sheet['E1']="呼叫类型"
sheet['F1']="对方号码"
sheet['G1']="本机通话地"
sheet['H1']="对方归属地"
sheet['I1']="通话类型"
sheet['J1']="通话费"
sheet['K1']="其他费"
sheet['L1']="小计"
f=open("data.txt","r")
list=f.readlines()
new_list=[]
for number in range(0,len(list),3):
    list[number]=list[number].replace("\n","")
    list[number+1]=list[number+1].replace("\n","")
    if len(list)!=1487:
        str=list[number]+list[number+1]+list[number+2]
        new_list.append(str)
    else:
        str=list[number]+list[number+1]
        new_list.append(str)
for i in new_list:
    i=i.split(",")
    sheet.append([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[7],i[8],i[9],i[10]])
workbook.save("话单数据.xlsx")

记得在同一目录下添加一个data.txt存放需要被处理的数据.
运行完以后,同一目录下产生一个"话单数据.xlsx"文件.如图
在这里插入图片描述

好了,这就是这次关于python脚本的内容,相信大家已经学会了.

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值