兩行代碼搞定(其實一行就可以創建了,不過關閉語句必須得有,或者你可以使用with open語句創建文檔,就可以不使用close()方法關閉,它會自動關閉):
f=open('test.docx','w')#創建docx格式文件
f.close()#關閉文檔,為了解除當前python程序對test.docx文檔的佔用
測試:
首先此目錄並無docx的文檔:
已經多個一個test.docx,word的空文檔。因為沒有寫入數據,所以是空文檔。
你可以在f.close()之前,使用f.wrie('testadfas')寫入數據,然後再調用f.close()關閉
B. 如何用python讀取word
使用Python的內部方法open()讀取文本文件
try:
f=open('/file','r')
print(f.read())
finally:
iff:
f.close()
如果讀取word文檔推薦使用第三方插件,python-docx 可以在官網上下載
使用方式
#-*-coding:cp936-*-
importdocx
document=docx.Document(文件路徑)
docText=' '.join([
paragraph.text.encode('utf-8')forparagraphindocument.paragraphs
])
printdocText
C. 說說 python-docx 解析 word 文檔的原理
首先通過 pip 安裝 python-docx,命令為 pip install python-docx 。
python-docx 使用 Document 對象來表示整個 docx 文檔。其內部包含 一個Paragraph 對象列表。每個 Paragraph 對應 docx 文檔的一個段落。
word 文檔中除了字元串,還包含字體、大小、顏色等樣式信息。相同樣式的連續字元串,就會被保存在一個 Run 對象中。
假設 docx 文檔中有下面這些內容:
那麼經過 python-docx 解析,就會生成 3 個 Run 對象:
D. python設置word文檔格式內容
import docx
doc=docx.Document()
整數 0 表示標題是 Title 樣式,這用於文檔的頂部。整數 1 到 45是不同的標題層次,是主要的標題, 45是最低層的子標題。
doc.add_heading('標題0',0)
doc.add_heading('標題1',1)
doc.add_heading('標題2',2)
doc.add_heading('標題3',3)
doc.add_heading('標題4',4)
doc.add_heading('標題5',5)
doc.save('example3.docx')
1# 添加內容
paragraph = doc_.add_paragraph()
run_ = paragraph.add_run("Python 博客")
2# 獲取字體對象
font_ = run_.font
3# 設置下劃線
font_.underline = True
4# 設置加粗
font_.bold = True
5# 設置字體顏色
font_.color.rgb = RGBColor(0xFF,0x00,0x00)
6# 設置字體大小
font_.size = Pt(20)
7# 獲取段落格式
paragraph_format = paragraph.paragraph_format
8# 設置首行縮進
paragraph_format.first_line_indent = Inches(0.2)
9# 設置段前距,單位為英鎊
paragraph_format.space_after = Pt(10)
10# 設置段後距,單位為英鎊
paragraph_format.space_before = Pt(5)
11# 添加表格
table_ = doc_.add_table(rows=2, cols=2, style="Medium Grid 1 Accent 1")
12# 填寫第一行第一列內容
table_.cell(0,0).text ="
13# 填寫第一行第二列內容
table_.cell(0,1).text =""
14# 填寫第二行第一列內容
table_.cell(1,0).text ="描述"
15# 填寫第二行第二列內容
table_.cell(1,1).text =""
16# 添加圖片、width 屬性設置大小
doc_.add_picture(r"/usr/load/download/test.png", width=Inches(4.25))
17# 保存文檔
doc_.save('Python--Word 內容格式.docx')
E. python從word中讀取規則數據存到excel中
word中文件的格式如圖,類似一個標準的參考文獻格式,而我的需求是按照作者,論文名,期刊名,時間,期卷號存到一個excel中。
1.首先,word的python讀取每次讀的是塊。
2.通過對格式的分析,確定了利用,來分割字元串,然後再用.來分割上次分割的第一個字元串,這對於期刊論文很適用,對於會議論文的可用性就弱很多。
3.數據的傳遞使用的是list而不是字典,如果有機會的話,可能字典更好用,只是時間有限。
python自帶的split
並且支持反向切割,str.rsplit()語法和正向一致
2.re庫帶的split,自認為的亮點是可以支持吧不同的符號作為切割位點,例如,
re.match與re.search的區別
re.match只匹配字元串的開始,如果字元串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字元串,直到找到一個匹配
Python 的 re 模塊提供了re.sub用於替換字元串中的匹配項。
語法:
F. Python Word文檔處理 上篇:python-docx
某天我收到一個需求:希望能夠用python對word文檔進行一些處理,比如更換一些文字以及添加批註。
簡單搜索後,我發現 python-docx 是一個處理docx文檔的常用python庫,因此我打算用它來進行進一步開發。
官方文檔 提供了一個簡單的示例
python-docx 將文檔抽象為document對象、paragraph對象以及run對象,提供了圍繞這些對象進行簡單處理的API
然而在文檔中並沒有出現關於批註操作的部分,我在搜尋 一些文章 後發現了在某個 issue 中提及了添加批註相關信息,然而還是沒有得到具體的解決辦法
docx文檔底層是由XML文件組成的
我們可以將一個 xx.docx 文件的後綴名改為 .rar 然後將其手動解壓,可以得到下面這些文件
在諸多文件當中主要用到的是 document.xml 文件,這里保存了文檔的內容
打開一份 document.xml 文件,拋開header、footer、table以及其他特殊項,去掉樣式等修飾項,一份樸素的docx文檔主要可以分為三個部分:paragraph、run、text
paragraph即段落,就是我們在word當中看到的一段。text即文本,就是真實的內容。run比較抽象,我們可以將其理解為片段,即語句的切分。
為了更好地理解run是什麼,打開一篇word文檔定位其中一句話
讓我們看看這篇文檔解壓之後的 document.xml 文件中對應的部分
OK,我們可以看到原本完整的一句話在word中被拆分成了許多個 <w:r> 標簽,這就是 run ,word切分 run 的規則很多,有的根據標點符號,有的根據中文分詞,句子中如果存在不同樣式的字詞也會單獨切分出來,因此我們很難預估一句話究竟會被分成幾個片段。
在issue中搜索comment關鍵字發現在一個 merge request 上已經給出了添加批註的解決方案,可以通過 paragraph 對象上的 add_comment 方法給一個段落添加批註
但這還是不符合我的需求,我的目標是精準添加到某個詞或者短語上
打開 這個貢獻者的源碼 進行研究
其實就是在P標簽內插入comment標簽引用,同時添加comment標簽到xx文件
同理我們可以在r標簽內插入comment標簽引用,同時添加comment標簽到xx文件,這樣就能實現給特定詞添加批註的需求了
G. python新建word文檔
話說,你是在自己電腦上好好的,然後突然不行了
還是在別人電腦不行了?
word.displayalerts
這個是2013的屬性
Microsoft Word 14.0,這是2010版
H. python怎麼在word表中插圖片
# -*- coding: UTF8 -*-from docx import Documentfrom docx.shared import Pt doc = Document() # 文件存儲路徑path = "C:\\Users\\Administrator\\Desktop\\word文檔\\" # 讀取文檔# doc = Document(path + "hello.docx") # 添加圖片,後面的參數設置圖片尺寸,可以選填doc.add_picture(path + 'cat.jpg', width=Pt(300))
I. python合並word
合並多個 word文件到 一個文件 中,用於文件的批量列印。
要求:
採用 python 實現,使用python中的 python-docx 和 docxcompose 結合的方式來實現此功能。
優點:
缺點:
只支持docx 文件的合並, 不支持doc文件 。如想通過此模式合並doc文件,需將doc文檔轉換為docx文檔。
將一個文件夾中的所有文件,都合並到一個文檔中。
要求每個文檔,都從一個新頁面開始,因此需在除第一個文檔的每個文檔前面加上 分頁符 ,所以單獨定義了一個只包含分頁符的文檔 page_break_doc 。
部分情況下會出現問題,如文檔當前已經到 最後一行 了,新加的分頁符會導致生成一頁空白的文件, 此種情況,後續更新此文章時解決 。
定義目標文檔,初始化時,採用 target_doc = Document(source_file_path_list[0]) 的方式,以第一個要拼接的文檔作為初始文檔。
主要是因為,如果創建的空的文檔 target_doc = Document() ,新生成的文檔中 自帶的文檔樣式 (如標題樣式、正文樣式等) 將會影響新拼接的文檔中的採用了默認樣式的內容 ,故模板文檔從第一個文檔中進行載入默認樣式,避免了這種情況。
這也是網上大多數採用此種方式合並word,樣式發生變更的原因 ,需注意此問題。
同時需注意,如果拼接的文檔中,存在默認格式不一樣,並且未為段落、文字指定單獨樣式的情況時,需檢查,第一個文件作為模板載入的默認樣式, 是否會影響後續的其他文件合並後的默認樣式 。
200個文件合並,耗時10秒左右。速度非常快
python腳本的程序,其他程序可以直接通過 命令行的形式調用 ,或者python提供http介面,程序通過 http介面調用 。
切記通過http介面調用其他程序是,需設置好調用超時時間,防止無限等待請求結果,導致負載均衡時,大量請求超時而導致的程序整體不再分發請求。
J. python輸出word內容
程序導出word文檔的方法
將web/html內容導出為world文檔,再java中有很多解決方案,比如使用Jacob、Apache POI、Java2Word、iText等各種方式,以及使用freemarker這樣的模板引擎這樣的方式。php中也有一些相應的方法,但在python中將web/html內容生成world文檔的方法是很少的。其中最不好解決的就是如何將使用js代碼非同步獲取填充的數據,圖片導出到word文檔中。
1. unoconv
功能:
1.支持將本地html文檔轉換為docx格式的文檔,所以需要先將網頁中的html文件保存到本地,再調用unoconv進行轉換。轉換效果也不錯,使用方法非常簡單。
\# 安裝
sudo apt-get install unoconv
\# 使用
unoconv -f pdf *.odt
unoconv -f doc *.odt
unoconv -f html *.odt
缺點:
1.只能對靜態html進行轉換,對於頁面中有使用ajax非同步獲取數據的地方也不能轉換(主要是要保證從web頁面保存下來的html文件中有數據)。
2.只能對html進行轉換,如果頁面中有使用echarts,highcharts等js代碼生成的圖片,是無法將這些圖片轉換到word文檔中;
3.生成的word文檔內容格式不容易控制。
2. python-docx
功能:
1.python-docx是一個可以讀寫word文檔的python庫。
使用方法:
1.獲取網頁中的數據,使用python手動排版添加到word文檔中。
from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading('Document Title', 0)
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
'first item in ordered list', style='ListNumber'
)
document.add_picture('monty-truth.png', width=Inches(1.25))
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
row_cells = table.add_row().cells
row_cells[0].text = str(item.qty)
row_cells[1].text = str(item.id)
row_cells[2].text = item.desc
document.add_page_break()
document.save('demo.docx')
from docx import Document
from docx.shared import Inches
document = Document()
for row in range(9):
t = document.add_table(rows=1,cols=1,style = 'Table Grid')
t.autofit = False #很重要!
w = float(row) / 2.0
t.columns[0].width = Inches(w)
document.save('table-step.docx')
缺點:
1.功能非常弱。有很多限制比如不支持模板等,只能生成簡單格式的word文檔。
程序導出PDF文檔方法
1.pdfkit
功能:
1.wkhtmltopdf主要用於HTML生成PDF。
2.pdfkit是基於wkhtmltopdf的python封裝,支持URL,本地文件,文本內容到PDF的轉換,其最終還是調用wkhtmltopdf命令。是目前接觸到的python生成pdf效果較好的。
優點:
1.wkhtmltopdf:利用webkit內核將HTML轉為PDF
webkit是一個高效、開源的瀏覽器內核,包括Chrome和Safari在內的瀏覽器都使用了這個內核。Chrome列印當前網頁的功能,其中有一個選項就是直接「保存為 PDF」。
2.wkhtmltopdf使用webkit內核的PDF渲染引擎來將HTML頁面轉換為PDF。高保真,轉換質量很好,且使用非常簡單。
使用方法:
\# 安裝
pip install pdfkit
\# 使用
import pdfkit
pdfkit.from_url('', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')
缺點:
1.對使用echarts,highcharts這樣的js代碼生成的圖標無法轉換為pdf(因為它的功能主要是將html轉換為pdf,而不是將js轉換為pdf)。對於純靜態頁面的轉換效果還是不錯的。
2.其他
其他生成pdf的插件還有:weasyprint,reportlab,PyPDF2等,經簡單試驗都不如pdfkit效果好,且有些用法復雜。