Python自動(dòng)化之批量生成含指定數(shù)據(jù)的word文檔
一、需求說明
在平時(shí)工作當(dāng)中,經(jīng)常需要處理文件,特別是Word,處理Word時(shí)會(huì)遇一類比較常見的場(chǎng)景:文檔中大部分文字固定不變,小部分內(nèi)容需要修改。
這時(shí)我們會(huì)機(jī)械的重復(fù)打開、修改、保存文檔等一系列操作,內(nèi)容少還可勉強(qiáng)接受,內(nèi)容一旦多了,心里難免會(huì)心浮氣躁。
今天我要給大家介紹一個(gè)秘密武器-docxtpl開發(fā)包,有了這個(gè)只需寫一份模板,其他的都交給電腦自己進(jìn)行。
首先需要你的電腦安裝好了Python環(huán)境,并且安裝好了Python開發(fā)工具。
如果你還沒有安裝,可以參考以下文章:
如果僅用Python來處理數(shù)據(jù)、爬蟲、數(shù)據(jù)分析或者自動(dòng)化腳本、機(jī)器學(xué)習(xí)等,建議使用Python基礎(chǔ)環(huán)境+jupyter即可,安裝使用參考Windows/Mac 安裝、使用Python環(huán)境+jupyter notebook
如果想利用Python進(jìn)行web項(xiàng)目開發(fā)等,建議使用Python基礎(chǔ)環(huán)境+Pycharm,安裝使用參考:Windows下安裝、使用Pycharm教程,這下全了 和 Mac下玩轉(zhuǎn)Python-安裝&使用Python/PyCharm 。
秘密武器介紹
docxtpl:一個(gè)很強(qiáng)大的包,其主要通過對(duì)docx文檔模板加載,從而對(duì)其進(jìn)行修改。
pandas:提供高性能易用數(shù)據(jù)類型和分析工具
安裝相關(guān)的第三方庫(kù)
Windows下按住Win+R打開運(yùn)行窗口,輸入cmd進(jìn)入命令提示符窗口(Mac打開終端即可),輸入以下命令安裝相關(guān)包:
pip install docxtpl
pip install pandas
使用案例
生成某學(xué)校計(jì)算機(jī)與信息工程學(xué)院的新生入學(xué)通知書合集。word模板和表格內(nèi)容如下(雙括號(hào)處為待填寫的部分):
效果如下
二、開始動(dòng)手動(dòng)腦
第一步:導(dǎo)入相關(guān)模塊:
from docxtpl import DocxTemplate import pandas as pd import os
第二步:用Python新建文件夾用來存放入學(xué)通知書,如果文件夾已存在代碼會(huì)跳過這一步:
zpath = os.getcwd() + '\\' #獲取當(dāng)前的路徑 zpath = r'E:\python\tj' + '\\' file_path = zpath + r'\通知書合集' try: os.mkdir(file_path) #創(chuàng)建一級(jí)目錄 except: pass
第三步:讀取csv文件中的數(shù)據(jù):
把表格里的每一列數(shù)據(jù)分別賦值給一個(gè)series類型變量,可以把series看成數(shù)組一樣的類型。
data = pd.read_csv(zpath+'AdmissionList.csv', encoding='gbk') #讀取csv里的目標(biāo)數(shù)據(jù) name = data["姓名"].str.rstrip() # str.rstrip()用于去掉空白 academy = data["學(xué)院"].str.rstrip() major = data["專業(yè)"].str.rstrip() begin_date = data["開始時(shí)間"].str.rstrip() end_date = data["結(jié)束時(shí)間"].str.rstrip()
第四步:將數(shù)據(jù)寫入模板:
遍歷表格的每一行,將數(shù)據(jù)存入字典列表,
num = data.shape[0] # 獲取數(shù)據(jù)行數(shù) for i in range(num): context = { "姓名": name[i], "學(xué)院": academy[i], "專業(yè)": major[i], "開始時(shí)間": begin_date[i], "結(jié)束時(shí)間": end_date[i] }
選定模板,
tpl = DocxTemplate(zpath+'入學(xué)通知書.docx')
渲染替換,將context里的內(nèi)容寫入word模板中,
tpl.render(context)#渲染替換
保存文件,名字為:**的入學(xué)通知書。
tpl.save(file_path+r"\{}的入學(xué)通知書.docx".format(姓名[i]))
上述操作重復(fù)num(即表格中數(shù)據(jù)的行數(shù))次,寫完這些就可以在file_path中找到生成的文件啦。
可能出現(xiàn)的錯(cuò)誤:
- 文件名亂碼:可以嘗試把解碼方式換成gbk;
- 權(quán)限問題:可能是需要讀入的數(shù)據(jù)文件正在被使用,關(guān)閉就行了;
- 生成的word文件行數(shù)混亂:可以把str.rstrip()寫成str.rstrip(‘\n');
- 只能生成同一份word文檔:每渲染一次,就要重新選定模板。
三、總結(jié)
通過本次實(shí)驗(yàn),我們實(shí)現(xiàn)了根據(jù)模板批量生成含指定數(shù)據(jù)的word文件,我最開始看代碼時(shí)不懂它是用的哪種類型變量接收從csv中讀取的數(shù)據(jù),通過打印輸出才知道是Pandas數(shù)據(jù)類型中的Series,百度后知道它類似于一維數(shù)組,可以保存任何數(shù)據(jù)類型。在后來運(yùn)行代碼的過程中又不斷地出現(xiàn)各種各樣的錯(cuò)誤,還都是沒遇到過的。
到此這篇關(guān)于Python自動(dòng)化之批量生成含指定數(shù)據(jù)的word文檔的文章就介紹到這了,更多相關(guān)Python生成含指定數(shù)據(jù)的word文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3 圖片 4通道轉(zhuǎn)成3通道 1通道轉(zhuǎn)成3通道 圖片壓縮實(shí)例
今天小編就為大家分享一篇python3 圖片 4通道轉(zhuǎn)成3通道 1通道轉(zhuǎn)成3通道 圖片壓縮實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python 實(shí)現(xiàn)一個(gè)顏色色值轉(zhuǎn)換的小工具
這篇文章主要介紹了Python 實(shí)現(xiàn)一個(gè)顏色色值轉(zhuǎn)換的小工具的相關(guān)資料,需要的朋友可以參考下2016-12-12python?matplotlib繪畫十一種常見數(shù)據(jù)分析圖
這篇文章主要介紹了python?matplotlib繪畫十一種常見數(shù)據(jù)分析圖,文章主要繪制折線圖、散點(diǎn)圖、直方圖、餅圖等需要的小伙伴可以參考一下文章具體內(nèi)容2022-06-06PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn)
在PyQt6中,滑塊是常用的用戶界面元素之一,用于選擇數(shù)值范圍,本文主要介紹了PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03提升?Python?代碼運(yùn)行速度的6個(gè)技巧
本文分享了提升?Python?代碼運(yùn)行速度的6個(gè)技巧,Python?比我們想象的運(yùn)行的要快。我們之所以有先入為主的認(rèn)為Python運(yùn)行慢,可能是我們平常的誤用和缺乏使用技巧知識(shí)。接下來讓我們看看如何用一些簡(jiǎn)單的Trick來提高我們程序的運(yùn)行性能,需要的朋友可以參考一下2022-01-01在python plt圖表中文字大小調(diào)節(jié)的方法
今天小編就為大家分享一篇在python plt圖表中文字大小調(diào)節(jié)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python實(shí)現(xiàn)的企業(yè)粉絲抽獎(jiǎng)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的企業(yè)粉絲抽獎(jiǎng)功能,涉及Python數(shù)值運(yùn)算與隨機(jī)數(shù)生成相關(guān)操作技巧,需要的朋友可以參考下2019-07-07python實(shí)現(xiàn)字符串加密成純數(shù)字
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)字符串加密成純數(shù)字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03