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...