码迷,mamicode.com
首页 > 其他好文 > 详细

word文档(选择题)转换为excl表格

时间:2018-12-25 13:19:52      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:题目   输出   处理   操作系统   函数   执行命令   rate   roc   数据   

Word转excl表格

同事在做一个批量性的工作,就是将word文档中的题目和选项,转移到xml文档中。
实例:
技术分享图片
转:
技术分享图片

再网上有很多将各种文档转化的工具和例子,但是很少有将固定格式进行转化的。

因为在这之前也是不明所以,老大直接让写个脚本,本能的感觉这个脚本不是很好写,有危险。但是哪有害怕就不做的道理,不会也要干。

首先确定好转化思路

1、查了很多资料,转excl的都是用的json文件转字典再转excl或者将字典、元组、列表转为json再转excl。归根结底就是将字典转excl。比较欣喜的是正好可以将题目当做key,选项和答案当做values。这样非常符合转换过程。
2、那么接下来的问题变成了如何将word文档内容转换为字典的形式。其实也一样很简单,接下来一点一点的分析就OK了。

环境问题:
python3:在编写过程中,因为出现中文,会遇到编码问题,而python3又将编码优化的很好,所以选择python3。(如果你出现乱码,或编码不正确,请考虑编码转化对错问题)
操作系统:linux(deepin)

困难又简单的编写历程

1、将word文档转换为字典形式

(1)读取word文档内容,python中给出了模块,python-docx
下载模块:

sudo pip3 install python-docx

我们需要用到的这个模块方法很简单,只需要读取和输出就可以了

import docx
file = docx.Document("./密码学竞赛习题.docx")

Document() 用来打开一个文档
(2)循环输出文档内容,将内容添加到字典当中

从word文档中我发现从第六行开始,没六行为一个题目加上答案。所以我想出先将每个题目循环输出出来,然后在将每个题目的内容循环加入的字典当中。又因为每个键对用多个值,所以,我将选项创建一个列表。

a={}
file = docx.Document("./密码学竞赛习题.docx")
for l in range(1,61):
    b=[]
    for idx,para in enumerate(file.paragraphs[6*l:6+6*l]):
        if idx==0:
            key=para.text
        elif idx==1:
            v1=para.text
            b.append(v1)
        elif idx==2:
            v2=para.text
            b.append(v2)
        elif idx==3:
            v3=para.text
            b.append(v3)
        elif idx==4:
            v4=para.text
            b.append(v4)
        elif idx==5:
            v5=para.text
            b.append(v5)
    a.update({key:b})

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。(百度得到,说白了就是给每行起个行号)

2、将字典转化为excl文件

(1)首先创建excl文件
python也给出了处理表格的模块xlwt,可以直接去下载

sudo pip3 install xlwt
创建一个表格

book = xlwt.Workbook()        #创建excl文件
sheet = book.add_sheet(‘sheet1‘)       #创建一个表
title = [‘题目‘,‘A‘,‘B‘,‘C‘,‘D‘,‘答案‘]           #每一列标题
for col in range(len(title)):                    #将标题逐个添加到表格当中
    sheet.write(0,col,title[col])
row=1                                     #设置行号

(2)正儿八经转excl

一切准备就绪,接下来就是将字典中的内容逐个加入到创建的excl中就OK

for k in a:
    data=a[k]
    data.insert(0,k)               #第一列加入序号
    for index in range(len(data)):             #依次写入每一行
        sheet.write(row,index,data[index])
    row += 1
book.save(‘TimuTest.xls‘)                     #保存excl的文件名

3、执行命令得到想要的excl表格

python3 docxToexcl.py

4、整个脚本代码

#!/usr/bin/python3
#coding:utf-8

import docx
import re
import json
import xlwt

a={}
file = docx.Document("./密码学竞赛习题.docx")
for l in range(1,61):
    b=[]
    for idx,para in enumerate(file.paragraphs[6*l:6+6*l]):
        if idx==0:
            key=para.text
        elif idx==1:
            v1=para.text
            b.append(v1)
        elif idx==2:
            v2=para.text
            b.append(v2)
        elif idx==3:
            v3=para.text
            b.append(v3)
        elif idx==4:
            v4=para.text
            b.append(v4)
        elif idx==5:
            v5=para.text
            b.append(v5)
    a.update({key:b})
book = xlwt.Workbook()
sheet = book.add_sheet(‘sheet1‘)
title = [‘题目‘,‘A‘,‘B‘,‘C‘,‘D‘,‘答案‘]
for col in range(len(title)):
    sheet.write(0,col,title[col])
row=1
for k in a:
    data=a[k]
    data.insert(0,k)
    for index in range(len(data)):
        sheet.write(row,index,data[index])
    row += 1
book.save(‘test.xls‘)

总结:

其实这个脚本写出来并不满意,因为我在写的时候,只考虑到了正在测试的word文档格式,既然是批量的,文档的格式也不一定都是一样的。所以很难做到将别的格式的文档转化为想要的excl表格。最大的问题就是如果文档中出现来一个空行,脚本依然会计算进去,同时每六行循环依次的话,结果就会出来差别。脚本需要改进,如今感觉好一点的办法是利用正则匹配选项。等有机会写出来的话再贴上来吧!!!

word文档(选择题)转换为excl表格

标签:题目   输出   处理   操作系统   函数   执行命令   rate   roc   数据   

原文地址:http://blog.51cto.com/12332766/2334976

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!