日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

如何用python自动改试卷_利用Python和Jinja2自动生成试卷

發布時間:2024/1/23 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何用python自动改试卷_利用Python和Jinja2自动生成试卷 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

Jinja2是Python 3下一個被廣泛應用的模版引擎,它的設計思想來源于Django的模板引擎,并擴展了其語法和一系列強大的功能。其中最顯著的一個是增加了沙箱執行功能和可選的自動轉義功能,這對大多應用的安全性來說是非常重要的。

Jinja2常見的幾種模板語句如下:[1]

{%...%} #運行Jinja2的語句;

{{…}} #在頁面中打印Jinja2運行的結果

{#...#} #注釋

遍歷Python列表/元組生成HTML代碼的例子:

{% for user in users %}

{{ user.username }}

{% endfor %}

在使用Python生成Word文檔的過程中,發現用模板技術可以節省大量的代碼。最近一個項目要導出Word文檔,于是將Word文檔導出為XML文件,再使用Jinja2的模板來生成XML文件,用Word軟件打開就得到了生成的Word文檔。這樣的做法比較方便省事,現在總結一下關鍵步驟,供大家參考,這里是一個簡單的試卷生成例子。

二、模板的制作

先用Word做一個試卷的模板文件,如圖1所示。

圖1Word試卷模板文件

然后將Word試卷模板文件另存為XML文件,之后用工具打開這個xml文件,這里用notepad++,主要是有高亮顯示,和元素自動配對,如圖2所示。

圖2 Word導出XML試卷模板文件

上面黑色的地方基本是我們之后要替換的地方,比如xx_title替換為{{ xx_title }},對已表格要十分注意,比如選擇題下面的表格,我們可以通過查找來定位,一對代表一行,也就是一條記錄(一道題),我們這里要用一對<% for … in … %><% endfor %>來將其包括,以便后續填充數據,具體可參照Jinja2頁面語法,例如這里選擇題,我們是兩行為一條記錄,所以要<% for … in … %><% endfor %>要包括兩行,形如:<% for q in questions %>題號 題目選項<% endfor %>,然后在這其中找著對應的q.xx,q.yyy,q.answer1,q.answer2,q.answer3,q.answer4替換為{{ q.xx }},{{ q.yyy }},{{ q.answer1 }},{{ q.answer2 }},{{ q.answer3 }},{{ q.answer4 }},注意這里的questions及q命名,questions后續填充數據要用到,其他的替換同理操作,如圖3所示。

圖3修改過的XML試卷模板文件

保存修改好的XML模板。

三、編程實現

使用Python開發腳本,調用jinja2包,讀取XML模板文件“template.xml”,在當前生成結果文件“試卷.xml”。首先,需要安裝Python的Jinjia2庫。可以在命令行提示符中用以下命令行在Windows系統中安裝Jinjia2庫,如圖5所示。

easy_install jinja

Python代碼如下:from jinja2 import Environment, FileSystemLoader

import os

# 獲取當前路徑

THIS_DIR = os.getcwd()

def generate_test_paper(title):

try:

# 創建 jinja2 環境

# Notice the use of trim_blocks, which greatly helps control

# whitespace.

paper_env = Environment(loader=FileSystemLoader(THIS_DIR),

trim_blocks=True)

#選擇題

questions = ({'xx':1,'yyy':"( )操作系統允許在一臺主機上同時連接多臺終端,多個用戶可以通過各自的終端同時交互地使用計算機。",'answer1':'Windows','answer2':'Linux','answer3':'Mac OS X','answer4':'DOS'},

{'xx':2,'yyy':"以下哪種類型是B/S構架的正確描述?",'answer1':'需要安裝客戶端的軟件','answer2':'不需要安裝就可以使用的軟件','answer3':'依托瀏覽器的網絡系統','answer4':'依托outlook等軟件的郵件系統'},

{'xx':3,'yyy':"下面哪個不是合法的SQL的歸類函數?",'answer1':'AVG','answer2':'SUM','answer3':'MIN','answer4':'CURRENT_DATE()'},

{'xx':4,'yyy':"PHP是一種什么型的語言:( )",'answer1':'編譯型','answer2':'解釋型','answer3':'兩者都是','answer4':'兩者都不是'})

#填空題

fillins = ({'xx':1,'yyy':"操作系統是計算機系統中的一個___系統軟件_______,它管理和控制計算機系統中的___資源_________。"},

{'xx':2,'yyy':"多道批處理系統的特點是_______和_______。"},

{'xx':3,'yyy':"處理機執行狀態有?______________?和______________兩種。"},

{'xx':4,'yyy':"實時系統應具有兩個基本特征:?_________和_________。"},)

#判斷題

judgments = ({'xx':1,'yyy':"軟件的開發與運行經常受到硬件的限制和制約。( )"},

{'xx':2,'yyy':"模塊內的高內聚往往意味著模塊間的松耦合。( )"},

{'xx':3,'yyy':"軟件的質量好壞主要由驗收人員負責,其他開發人員不必關心。( )"},

{'xx':4,'yyy':"判定覆蓋不一定包含條件覆蓋,條件覆蓋也不一定包含判定覆蓋。( )"},)

paper = paper_env.get_template('template.xml').render(xx_title=title,questions=questions,fillins=fillins,judgments=judgments, encoding='utf-8')

#簡答題

short_answers = ({'xx':1,'yyy':"SQL提供的基本數據類型有哪些?每種舉兩個例子。"},

{'xx':2,'yyy':"簡述Where子句與Having子句的區別。"},

{'xx':3,'yyy':"簡述視圖的定義以及與基本表的區別。"},

{'xx':4,'yyy':"簡述數據庫系統如何實現應用程序與數據物理獨立性和邏輯獨立性。"},)

# 從加載本地 template.xml 模板文件,并傳入數據

paper = paper_env.get_template('template.xml').render(xx_title=title,questions=questions,fillins=fillins,judgments=judgments,short_answers=short_answers, encoding='utf-8')

return paper

except Exception as e:

print("Generate test paper failed!")

raise e

def write_test_paper(title,paper_text):

try:

path = r'%s.xml' % title

with open(path, 'w', encoding='utf-8') as test:

test.write(paper_text)

return path

except Exception as e:

print("Write test paper failed!")

raise e

if __name__ == '__main__':

title = '試卷'

paper_text = generate_test_paper(title)

write_test_paper(title,paper_text)

print("Generate and write test paper successfully!")

注意上面元組questions、fillins、judgments和short_answers里的字典當中的key必須和模板中的對應,否則會報錯。

四、項目運行

下載附件后,解壓后,看到目錄中的文件,如圖4所示。

圖4壓縮包里的文件

打開命令行提示符,切換到解壓縮文件的目錄,執行命令行python jinja2_word.py,如圖6所示。

圖6運行Python腳本

Python腳本會在當前目錄下生成結果XML文件“試卷.xml”,如圖7所示。

圖7生成的結果XML文件

五、運行效果

用Microsoft Word打開生成的“試卷.xml”,如圖8所示。

圖8生成的結果XML文件

可將生成的結果XML文件另存為標準的Word文檔。

六、結語

本文通過使用Python腳本和Jinja2的模板技術實現了根據現有的Word模板文檔,通過程序導入結構化的數據自動生成試卷文檔。Jinja2的模板技術簡單易用性和Python的快速開發的特性結合在一起,使其相比其它的Word文檔生成技術難度更小、開發效率更高。

參考文獻

[1] Armin Ronacher. 模板設計者文檔. http://docs.jinkan.org/docs/jinja2/templates.html, 2013/6/30.

總結

以上是生活随笔為你收集整理的如何用python自动改试卷_利用Python和Jinja2自动生成试卷的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。