1. 程式人生 > >Python是怎樣生成毛概題庫的?有一些Python基礎,程式碼很容易的!

Python是怎樣生成毛概題庫的?有一些Python基礎,程式碼很容易的!

下個月就要考毛概了

看到毛概書,心裡就一陣涼涼

 

 

心想看看做做題吧

喵喵喵?

居然是Excel的?

 

 

這東西怎呢看!

鬧呢!

還好我會Python

 

 

通過Python的 xlrd 和 python-docx 庫

讀取題庫的excel檔案

通過Python格式化一下

然後就寫入word中..

最後再匯出PDF

大功告成!

 

 

下面就分享下

有一些Python基礎,程式碼還是比較容易的下面我就分享下我的思路歡迎大家評論指正

1. 思路

要生成題庫,我們首先觀察一下題庫的樣子

 

 

通過觀察,篩選出我們需要的資訊,這裡我們只需要題目型別,題幹,正確答案,選項數,選項內容這幾項。

所以大致提取過程是這樣的:

  1. 讀取excel檔案獲取題庫 
  2. 格式化題庫(讓題目變成可以處理)
  3. 按照一定格式寫入word檔案

2. 需要的庫

人生苦短,我用Python。Python之所以簡單,不只是英文它簡單的語法,而且還有大量的第三方庫可以使用。

原來題庫是excel檔案,Python當然有讀取excel的庫 xlrd,

在寫入word檔案時候,需要安裝python-docx

3. 定義題目分類

通過看題庫檔案,發現題目分為5種類型:

單選題, 多選題, 填空題,判斷題,簡答題。

所以我們預先定義好,用數字表示,這樣之後處理方便很多。

 

 

4. 獲取所有題庫的檔案目錄

因為題庫分為好多章節,每個章節都是單獨一個excel檔案,我把它們放到一個指定的資料夾下:

 

 

 

接下來指定所有題庫的目錄,獲取所有的題庫檔案。另外我這裡使用sorted排序,保證按照章節順序讀取。排序是依據每個章節檔案前的數字排序,即指定排序的key值為數字,獲取章節的key的函式是get_key(),通過正則表示式將章節檔案的前面的數字讀取出來。

這樣xl_list即為所有輸入檔案的路徑。如下圖:

 

然後就可以使用xlrd愉快的讀取了

 

 

5. 定義問題類

在讀取之前我這裡先定義一個問題類,讀取到資訊在類中處理。這樣有利於程式碼的封裝,之後如果有要修改的也比較方便。這裡主要做的是根據題目型別儲存正確答案。

比如判斷題給出的答案是A或B(對與錯),這樣不方便閱讀,把他變成正確或者錯誤就會好點(choose裡面存放就是正確和錯誤)。

以及就是簡單題沒有選項,而傳入引數chooses的第一個元素為答案,所繫我們直接把答案設定為選項的第一個元素,並且不設定答案(' '.join(chooses)是將陣列用空格連線起來)。

程式碼如下:

 

 

6. 格式化讀取題庫

下面就是正式讀取題庫了,程式碼如下圖。通過xlrd依次開啟每個章節的題庫excel檔案。在一個excel檔案中,有多個 sheet 組成。每一個sheet就可以抽象成一個二維陣列,知道要讀取的陣列的座標在哪,就可以讀取了。在讀取檔案中只有一個sheet, 我們就選取第一個(程式設計師的第一個下標是0)。 讀取x,y單元格的api為cell(x, y),讀取完成後是一個sheet物件,再使用value獲取實際的值。

讀取excel一行即為一道題,我們就生成一個quesion物件,然後把它存放到一個這個章節全部題目的列表中。

當讀取完一個章節的檔案後,我們按照檔案的型別排序(還記得之前用數字表示下標麼?,這樣排序簡單點)。再將該章節的所有習題列表以檔名為key放入一個字典中。

 

我們可以看下all_result中的內容

 

 

7. 生成word檔案

程式碼在如下圖,不要覺得很長,註釋就佔了一半啦。拆開看就是寫入doc,首先寫入標題,接下來依次寫入題目的標題,然後判斷題目的型別,依次寫入。這裡我們使用傳入引數with_ans判斷是否顯示答案,choose_end來控制選項結尾的符號,\t為製表符,\n為換行。使用filter來控制要輸出的題目型別。預設全都顯示,但是如果有些題我們不想顯示的話,那麼傳入的時候就指定自己想要輸出的題目型別。

 

 

下面的程式碼就是依次將處理好的題庫字典檔案生word格式文件。在最後並且儲存好檔案。

 

通過gen_doc指定的引數我們就可以控制生成的文件內容