天天看點

word文檔(選擇題)轉換為excl表格

Word轉excl表格

同僚在做一個批量性的工作,就是将word文檔中的題目和選項,轉移到xml文檔中。

執行個體:

word文檔(選擇題)轉換為excl表格

轉:

word文檔(選擇題)轉換為excl表格

再網上有很多将各種文檔轉化的工具和例子,但是很少有将固定格式進行轉化的。

因為在這之前也是不明是以,老大直接讓寫個腳本,本能的感覺這個腳本不是很好寫,有危險。但是哪有害怕就不做的道理,不會也要幹。

首先确定好轉化思路

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

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表格

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')           

總結:

繼續閱讀