python zipfile修改docx並儲存

2021-09-03 00:24:13 字數 1478 閱讀 9956

docx是microsoft office2007之後版本使用的,用新的基於xml的壓縮檔案格式取代了其目前專有的預設檔案格式,在傳統的檔名擴充套件名後面新增了字母「x」。

從上述可以知道,只需修改相對應的xml,就可以修改整個docx檔案。

將docx用壓縮軟體開啟,可以看到下圖

document.xml即為我們所需修改的xml檔案。

此次我們要修改的是固定的模板,例子如下:

我們需要在各個位置填上不重複的單詞或拼音,相同類別可以加上數字,以便於之後的替換。如下圖所示:

解壓出docx檔案,資料夾命名為tmp1,複製出document.xml 與tmp1資料夾放在同一級資料夾下,命名為tmp1.xml

with open(u'tmp1.xml', 'r') as f:

xml = f.read() #開啟並讀取xml

year = 2018

month = 12

# 替換你需要替換的位置

xml = xml.replace('nian', year).replace('yue', month)

記得最後將沒有被替換的位置替換為空,不然就難看咯

接著儲存xml到tmp1資料夾的word內

with open('tmp1/word/document.xml', 'w') as f:

f.write(xml)

接著壓縮資料夾 startdir:壓縮的資料夾位置  file_news:要儲存的docx檔案位置

# 壓縮docx 

def zip_docx(startdir, file_news):

z = zipfile.zipfile(file_news, 'w', zipfile.zip_deflated)

for dirpath, dirnames, filenames in os.walk(startdir):

fpath = dirpath.replace(startdir, '')

fpath = fpath and fpath + os.sep or ''

for filename in filenames:

z.write(os.path.join(dirpath, filename), fpath+filename)

z.close()

zip_docx('tmp1/', 'tmp1.docx')

Python zipfile解壓中文問題

windows中使用python2.7遍歷zip檔案之後輸出檔名等資訊,console列印的中文及一些標點出現亂碼。查了一下網上說的windows的編碼為cp936,print 函式交給系統處理列印,所以要提前編碼成windows能夠識別的編碼。這種print的亂碼也會出現在形如print myli...

python zipfile壓縮檔案

import zipfile,os def compress get files path,set files path 壓縮檔案生成.zip 格式檔案 param get files path 需要壓縮的資料夾 param set files path 存放壓縮檔案的位址 return f zip...

Python zipfile 打包超級實用

import zipfile import os defzip pack target,filepath if not target.endswith zip target target format zip zipfilepath os.path.basename target split 0 f...