python 自动化办公 随机生成题库文档
HI,大家好,我是最渣的黑客,很久沒(méi)有更新文章了,今天更新一篇,利用python 做一個(gè)隨機(jī)生成的題庫(kù)文檔。對(duì)一些老師考試檢測(cè)等等,可能會(huì)是一個(gè)很好的幫助。
首先要準(zhǔn)備的是很多題庫(kù)在一個(gè)EXCEL 表中,題目為第一列,答案在第二列。
如下:
?接下來(lái)是代碼階段。我這里是開(kāi)發(fā)的窗口化程序。簡(jiǎn)單易懂。復(fù)制即可使用。
開(kāi)發(fā)環(huán)境:
解釋器:python 3.6.8
編輯器:pycharm 2019.1.3
編碼格式:utf-8
需要安裝的庫(kù):python-docx,pandas,xlrd 【1.2.0版本】,xlwt,
溫馨提示:如果你運(yùn)行出來(lái)各種報(bào)錯(cuò),唯一要檢查的是你的一些格式問(wèn)題,庫(kù)安裝,環(huán)境問(wèn)題。?
#encoding:utf-8 import pandas as pd from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx import Document from docx.shared import Pt from docx.oxml.ns import qn import random import os from docx.shared import Pt,RGBColor import tkinter as tk from tkinter import filedialog import threadingwindow = tk.Tk()window.title('隨機(jī)生成題庫(kù)器') window.geometry("400x540") # 窗口大小(長(zhǎng)*寬)label = tk.Label(window,text='題庫(kù)數(shù)量', #text為顯示的文本內(nèi)容bg='black',fg='white',justify='left') #bg為背景色,fg為前景色 label.pack(padx=50,pady=2)textExample = tk.Text(window, width=20, height=2) # 文本輸入框 textExample.pack(padx=50,pady=10) # 把Text放在window上面,顯示Text這個(gè)控件 # textExample.insert("insert","請(qǐng)輸入需要多少題為一個(gè)文件庫(kù)")label = tk.Label(window,text="題庫(kù)文檔數(shù)量", #text為顯示的文本內(nèi)容bg='black',fg='white',justify='left') #bg為背景色,fg為前景色 label.pack(padx=50,pady=2)textExample2 = tk.Text(window, width=20, height=2) # 文本輸入框 textExample2.pack(padx=50,pady=10) # 把Text放在window上面,顯示Text這個(gè)控件label = tk.Label(window,text="文檔名稱", #text為顯示的文本內(nèi)容bg='black',fg='white',justify='left') #bg為背景色,fg為前景色 label.pack(padx=50,pady=2)textExample3 = tk.Text(window, width=20, height=2) # 文本輸入框 textExample3.pack(padx=50,pady=10) # 把Text放在window上面,顯示Text這個(gè)控件def readfile(filepath):"""讀取EXCEL文件"""datalist = []for d in filepath:data = pd.read_excel(d)data = data.values.tolist()for d in data:title = d[0]content = d[1]tc = [title, content]datalist.append(tc)return datalistdef wordDoc(readfile,filename,filpaths,generateNumber):"""寫(xiě)入word文檔filename: 文件名稱generateNumber:隨機(jī)生成多少題"""data = readfiledataramdom = random.sample(data,int(generateNumber))doctitle = filenamedoc = Document()doc.styles['Normal'].font.name = u'宋體'doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')# doc.styles['Normal'].font.color.rgb = RGBColor(0, 0, 0)#輸入文檔標(biāo)題t = doc.add_paragraph()t1 = t.add_run(doctitle) # 文檔總標(biāo)題t1.font.size = Pt(15)t.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERt1.font.color.rgb = RGBColor(255, 0, 0)#輸入文檔內(nèi)容for dr in dataramdom:title = dr[0]content = dr[1]content = str(content).replace('\n','',1)t2 = doc.add_paragraph().add_run(title) #輸入標(biāo)題t2.font.color.rgb = RGBColor(0, 0, 255)t2.bold = Truedoc.add_paragraph(content) #輸入內(nèi)容doc.save(f'{filpaths}.docx')def makefolder(filepath):"""創(chuàng)建文件夾"""while True:if os.path.isdir(filepath):breakelse:os.makedirs(filepath)def upload_file():"""獲取文件地址"""selectFile = tk.filedialog.askopenfilenames() # askopenfilename 1次上傳1個(gè);askopenfilenames1次上傳多個(gè)selectFile = list(selectFile)upload_entry.insert(0, selectFile)return selectFiledef getTextInput():"""獲取輸入"""global textExample3countdoc1 = textExample.get("1.0", "end") # 獲取多少題countdoc2 = textExample2.get("1.0", "end") # 形成多少題庫(kù)文檔countdoc3 = textExample3.get("1.0", "end")countdoc1 = str(countdoc1).replace('\n','')countdoc2 = str(countdoc2).replace('\n','')countdoc3 = str(countdoc3).replace('\n','')filelist = upload_file()r = readfile(filelist)folderpath = './生成的題庫(kù)'docName = countdoc3folderpath = os.path.join(folderpath, docName)makefolder(folderpath) # 創(chuàng)建文件夾n = int(countdoc2)m = 0while True:m += 1if m > n:breakelse:filename = docName + "_" + str(m)filapathName = os.path.join(folderpath, filename)print(f"{filename} 生成成功")wordDoc(r,countdoc3,filapathName,countdoc1)def thread_it(func):'''將函數(shù)打包進(jìn)線程'''# 創(chuàng)建t = threading.Thread(target=func)# 守護(hù) !!!t.setDaemon(True)# 啟動(dòng)t.start()# 阻塞--卡死界面!#輸入文件 upload = tk.Frame(window) upload.pack(padx=20,pady=20) upload_entry = tk.Entry(upload, width='40') upload_entry.pack(padx=50,pady=10)import time nowtime = time.time()nowtime1 = int(time.time()) nowtime2 = int(time.time())+3000btnRead = tk.Button(window, height=1, width=10, text="開(kāi)始程序", command=lambda:thread_it(getTextInput)) btnRead.pack(padx=50,pady=10) # 顯示按鈕window.mainloop()軟件最終呈現(xiàn)如下:
題庫(kù)數(shù)量表示:一個(gè)文檔有多少個(gè)題
題庫(kù)文檔數(shù)量表示:你需要生成多個(gè)文檔
文檔名稱:文檔的主要內(nèi)容的主標(biāo)題,也是文檔的文件名稱
?
如果這篇文章對(duì)你有幫助,記得點(diǎn)個(gè)關(guān)注!
總結(jié)
以上是生活随笔為你收集整理的python 自动化办公 随机生成题库文档的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网络流量监控软件——MRTG(Multi
- 下一篇: python办公自动化练习——体温