Python是怎樣生成毛概題庫的?有一些Python基礎,程式碼很容易的!
下個月就要考毛概了
看到毛概書,心裡就一陣涼涼
心想看看做做題吧
喵喵喵?
居然是Excel的?
這東西怎呢看!
鬧呢!
還好我會Python
通過Python的 xlrd 和 python-docx 庫
讀取題庫的excel檔案
通過Python格式化一下
然後就寫入word中..
最後再匯出PDF
大功告成!
下面就分享下
有一些Python基礎,程式碼還是比較容易的下面我就分享下我的思路歡迎大家評論指正
1. 思路
要生成題庫,我們首先觀察一下題庫的樣子
通過觀察,篩選出我們需要的資訊,這裡我們只需要題目型別,題幹,正確答案,選項數,選項內容這幾項。
所以大致提取過程是這樣的:
- 讀取excel檔案獲取題庫
- 格式化題庫(讓題目變成可以處理)
- 按照一定格式寫入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指定的引數我們就可以控制生成的文件內容