Python自動化之批量生成含指定數據的word文檔
一、需求說明
在平時工作當中,經常需要處理文件,特別是Word,處理Word時會遇一類比較常見的場景:文檔中大部分文字固定不變,小部分內容需要修改。
這時我們會機械的重復打開、修改、保存文檔等一系列操作,內容少還可勉強接受,內容一旦多瞭,心裡難免會心浮氣躁。
今天我要給大傢介紹一個秘密武器-docxtpl開發包,有瞭這個隻需寫一份模板,其他的都交給電腦自己進行。
首先需要你的電腦安裝好瞭Python環境,並且安裝好瞭Python開發工具。
如果你還沒有安裝,可以參考以下文章:
如果僅用Python來處理數據、爬蟲、數據分析或者自動化腳本、機器學習等,建議使用Python基礎環境+jupyter即可,安裝使用參考Windows/Mac 安裝、使用Python環境+jupyter notebook
如果想利用Python進行web項目開發等,建議使用Python基礎環境+Pycharm,安裝使用參考:Windows下安裝、使用Pycharm教程,這下全瞭 和 Mac下玩轉Python-安裝&使用Python/PyCharm 。
秘密武器介紹
docxtpl:一個很強大的包,其主要通過對docx文檔模板加載,從而對其進行修改。
pandas:提供高性能易用數據類型和分析工具
安裝相關的第三方庫
Windows下按住Win+R打開運行窗口,輸入cmd進入命令提示符窗口(Mac打開終端即可),輸入以下命令安裝相關包:
pip install docxtpl
pip install pandas
使用案例
生成某學校計算機與信息工程學院的新生入學通知書合集。word模板和表格內容如下(雙括號處為待填寫的部分):
效果如下
二、開始動手動腦
第一步:導入相關模塊:
from docxtpl import DocxTemplate import pandas as pd import os
第二步:用Python新建文件夾用來存放入學通知書,如果文件夾已存在代碼會跳過這一步:
zpath = os.getcwd() + '\\' #獲取當前的路徑 zpath = r'E:\python\tj' + '\\' file_path = zpath + r'\通知書合集' try: os.mkdir(file_path) #創建一級目錄 except: pass
第三步:讀取csv文件中的數據:
把表格裡的每一列數據分別賦值給一個series類型變量,可以把series看成數組一樣的類型。
data = pd.read_csv(zpath+'AdmissionList.csv', encoding='gbk') #讀取csv裡的目標數據 name = data["姓名"].str.rstrip() # str.rstrip()用於去掉空白 academy = data["學院"].str.rstrip() major = data["專業"].str.rstrip() begin_date = data["開始時間"].str.rstrip() end_date = data["結束時間"].str.rstrip()
第四步:將數據寫入模板:
遍歷表格的每一行,將數據存入字典列表,
num = data.shape[0] # 獲取數據行數 for i in range(num): context = { "姓名": name[i], "學院": academy[i], "專業": major[i], "開始時間": begin_date[i], "結束時間": end_date[i] }
選定模板,
tpl = DocxTemplate(zpath+'入學通知書.docx')
渲染替換,將context裡的內容寫入word模板中,
tpl.render(context)#渲染替換
保存文件,名字為:**的入學通知書。
tpl.save(file_path+r"\{}的入學通知書.docx".format(姓名[i]))
上述操作重復num(即表格中數據的行數)次,寫完這些就可以在file_path中找到生成的文件啦。
可能出現的錯誤:
- 文件名亂碼:可以嘗試把解碼方式換成gbk;
- 權限問題:可能是需要讀入的數據文件正在被使用,關閉就行瞭;
- 生成的word文件行數混亂:可以把str.rstrip()寫成str.rstrip(‘\n’);
- 隻能生成同一份word文檔:每渲染一次,就要重新選定模板。
三、總結
通過本次實驗,我們實現瞭根據模板批量生成含指定數據的word文件,我最開始看代碼時不懂它是用的哪種類型變量接收從csv中讀取的數據,通過打印輸出才知道是Pandas數據類型中的Series,百度後知道它類似於一維數組,可以保存任何數據類型。在後來運行代碼的過程中又不斷地出現各種各樣的錯誤,還都是沒遇到過的。
到此這篇關於Python自動化之批量生成含指定數據的word文檔的文章就介紹到這瞭,更多相關Python生成含指定數據的word文檔內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python讀取HTML中的canvas並且以圖片形式存入Word文檔
- 安裝python-docx後,無法在pycharm中導入的解決方案
- Python快速優雅的批量修改Word文檔樣式
- python實現自動化辦公郵件合並功能
- 在Pycharm中安裝Pandas庫方法(簡單易懂)