<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python自動化:根據(jù)模板批量生成含指定數(shù)據(jù)的word文檔

          共 2586字,需瀏覽 6分鐘

           ·

          2021-11-05 14:25

          作者:一只河馬h ?| 想學(xué)好Python

          來源:簡說Python


          大家好,我是愛貓愛技術(shù)的老表,本文來自學(xué)妹投稿,希望大家多多點(diǎn)贊支持。

          一、需求說明

          在平時(shí)工作當(dāng)中,經(jīng)常需要處理文件,特別是Word,處理Word時(shí)會遇一類比較常見的場景:文檔中大部分文字固定不變,小部分內(nèi)容需要修改。
          這時(shí)我們會機(jī)械的重復(fù)打開、修改、保存文檔等一系列操作,內(nèi)容少還可勉強(qiáng)接受,內(nèi)容一旦多了,心里難免會心浮氣躁。
          今天我要給大家介紹一個(gè)秘密武器-docxtpl開發(fā)包,有了這個(gè)只需寫一份模板,其他的都交給電腦自己進(jìn)行。

          首先需要你的電腦安裝好了Python環(huán)境,并且安裝好了Python開發(fā)工具。
          如果你還沒有安裝,可以參考以下文章:
          如果僅用Python來處理數(shù)據(jù)、爬蟲、數(shù)據(jù)分析或者自動化腳本、機(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)大的包,其主要通過對docx文檔模板加載,從而對其進(jìn)行修改。
          pandas:提供高性能易用數(shù)據(jù)類型和分析工具

          安裝相關(guān)的第三方庫
          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)容如下(雙括號處為待填寫的部分):

          ?


          效果如下

          二、開始動手動腦

          第一步:導(dǎo)入相關(guān)模塊:

          from?docxtpl?import?DocxTemplate
          import?pandas?as?pd
          import?os

          第二步:用Python新建文件夾用來存放入學(xué)通知書,如果文件夾已存在代碼會跳過這一步:

          zpath?=?os.getcwd()?+?'\\'??#獲取當(dāng)前的路徑
          zpath?=?r'E:\python\tj'?+?'\\'
          file_path?=?zpath?+?r'\通知書合集'
          try:
          ????os.mkdir(file_path)??#創(chuàng)建一級目錄
          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ò)誤:

          1)文件名亂碼:可以嘗試把解碼方式換成gbk;

          2)權(quán)限問題:可能是需要讀入的數(shù)據(jù)文件正在被使用,關(guān)閉就行了;

          3)生成的word文件行數(shù)混亂:可以把str.rstrip()寫成str.rstrip(‘\n’);

          4)只能生成同一份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ò)誤,還都是沒遇到過的。
          在學(xué)習(xí)編程的過程中,看不懂代碼和報(bào)錯(cuò)是經(jīng)常會出現(xiàn)的問題,剛開始遇到會覺得很慌很煩躁,但是學(xué)習(xí)就是把自己遇到的問題解決的過程,知識都是在錯(cuò)誤和不懂中積累起來的,所以讓我們一起努力學(xué)習(xí),成為一個(gè)打不倒的程序猴。
          關(guān)于新手怎么自學(xué)Python、解決編程遇到的問題,推薦大家看這篇文章:怎么自學(xué)Python,大概要多久?思路推薦

          干貨文章,求點(diǎn)贊轉(zhuǎn)發(fā)支持。

          --END--

          掃碼即可加我微信

          老表朋友圈經(jīng)常有贈書/紅包福利活

          如何找到我:

          近期優(yōu)質(zhì)文章:

          肝了幾天,十分鐘入門pandas(上)

          肝了幾天,十分鐘入門pandas(下)

          原創(chuàng)回答|用 Python 進(jìn)行數(shù)據(jù)分析,學(xué)習(xí)書籍或資料推薦?

          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機(jī)器學(xué)習(xí)等方面,別再說不知道該從哪開始,實(shí)戰(zhàn)哪里找了
          點(diǎn)贊”就是對博主最大的支持?
          瀏覽 78
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天av视 | 人人搞天天摸 | 岛国AV免费看 | 长泽梓在线 | 免费中文字幕日韩欧美 |