運用好Python處理文檔的小技巧,讓你成為女神心中superstar!
今天小編給大家帶來了一篇,主要運用Python_docx模塊處理word文檔的基本技巧來介紹,其中最主要的是如何對圖片進行提取和寫入。
python已有幾個模塊可處理word文檔、excel表格、以及ppt演示文稿。首先,匯總列出各模塊對不同版本文件的處理能力:
docx模塊:可讀取、寫入.docx文檔(不支持.doc文檔!!!)
xlrd模塊:可讀取.xls、.xlsx表格
xlwt模塊:可寫入.xls表格(不可寫入.xlsx文件!!!)
pptx模塊:可讀取、寫入.ppt、.pptx(.ppt演示文稿,只能讀取pptx模塊自身輸出的,對其他方式生成的不支持!!!)
首先我們來介紹docx模塊中如何描述一篇word文檔。
word文檔的結構描述不如excel表格那麽直觀。word文檔整體上有幾類對象組成:
(1)節Section:表示word文檔中頁面布局一樣的部分內容。
(2)段落Paragraph:word文檔的基本組成單元就是段落。文字、圖形都位於段落之中。
(3)塊Run:每個段落之中的內容可以具有不同的樣式,這些具有相同樣式的基本單元可稱之為塊。一個段落可由多個塊組成(各塊之間允許設置不同的樣式,但也可保持相同的樣式)。
(4)內聯圖形Inline_shape:以嵌入方式置入word文檔中的圖形稱之為內聯圖形。除此之外,還有其他布局方式的圖形,可在塊中找到,但其並不在內聯圖形集合中。
(5)表格Table:嵌入word文檔的表格。表格由行、列、單元格組成。單元格中的內容可以包含段落、圖形、表格等。註意,表格不在段落之中。
(6)樣式Style:用來確定word文檔內置對象格式的各種樣式,包括段落樣式、表格樣式、字符樣式、列表樣式(包括有序列表和無序列表)。
以上1~3項、6項是一個word文檔必備的元素。
下面介紹docx模塊具體如何操作一個word文檔。
打開或新建文檔:
doc = docx.Document(‘1.docx‘) #打開word文檔1.docx,如果不指定文件路徑,則新建文檔
節操作:
新建的文檔已包含一個節對象。節對象本質上是一個分節符(除第一節外),分節符本身構成一個獨立段落,包括在doc.paragraphs中。
doc.sections #返回文檔中節集合,其組成元素為節對象,可以通過索引獲取
doc.add_section(start_type=2) #增加一個新節,start_type為分節符的類型
doc.sections[n] #返回索引為n的節對象。可以通過節對象的屬性訪問或設置節的格式,其主要屬性包括:
- 分節符類型:‘start_type‘,0表示連續分節符,1表示節的結尾符號,2表示下一頁分節符,3表示偶數頁分節符,4表示奇數頁分節符頁面方向: ‘orientation‘,1表示橫向,0表示縱向頁面尺寸:‘page_height‘(頁高), ‘page_width‘(葉寬)。距離屬性都可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象)邊距:‘bottom_margin‘(底部頁邊距), ‘footer_distance‘(頁腳到底部間距), ‘gutter‘(裝訂線到葉邊距離), ‘header_distance‘(頂部頁邊距), ‘left_margin‘(左側頁邊距), ‘right_margin‘(右側頁邊距), ‘top_margin‘(頂部頁邊距)。距離屬性都可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象)
段落操作:
doc.paragraphs #返回文檔中段落集合,其組成元素為段落對象,可以通過索引獲取
doc.paragraphs[n] #返回索引為n的段落對象
doc.add_paragraph(text=‘‘, style=None) #在文檔末尾增加一個新的段落,text為段落文本,style為段落樣式(如缺省為None,則繼承文檔默認段落樣式)
doc.add_heading(text=‘‘, level=1) #在文檔末尾增加標題段落。level表示標題級別
doc.add_page_break() #在文檔末尾增加新段落,該段落僅包含分頁符
doc.paragraphs[n].insert_paragraph_before(text=None, style=None) #在索引為n的段落前增加一個段落
doc.paragraphs[n].text #返回或設置段落的文本內容
doc.paragraphs[n].paragraph_format #返回索引為n的段落的段落格式。可以通過段落格式(而不是段落對象本身,與節對象不同)的屬性訪問或設置段落的格式,其主要屬性包括:
- 段落對齊方式:‘alignment‘,0為左對齊,1為居中,2為右對齊,3為兩端對齊,4為分散對齊,5為垂直居中對齊,7為垂直頂端對齊,8為垂直底端對齊,9為泰文對齊(5~9還有待確認)縮進:‘first_line_indent‘(首行縮進,如為負值則是懸掛縮進), ‘left_indent‘(段落左側縮進), ‘right_indent‘(段落右側縮進)。距離屬性都可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象)間距:‘line_spacing‘(行距), ‘line_spacing_rule‘(行距預設值,0表示單倍行距,1表示1.5倍行距,2表示2倍行距,3表示最小行距,4表示固定行距,5表示多倍行距), ‘space_after‘(段後間距), ‘space_before‘(段前間距)。除行距預設值外,其他都是距離屬性,都可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象)換行和分頁:‘keep_together‘(段中不分頁), ‘keep_with_next‘(與下段同頁), ‘page_break_before‘(段前分頁), ‘widow_control‘(孤行控制),均為邏輯值(True/False)制表位:‘tab_stops‘,返回該段落采用的制表位集合。所謂制表位,就是在標尺上出現的標記,用於控制tab鍵的對齊方式。doc.paragraphs[n].tab_stops.add_tab_stop(position, alignment=0, leader=0) #在position(離段落左邊界的距離)位置添加一個制表位,alignment為制表位對齊方式(0為左對齊,1為居中,2為右對齊,3為小數點對齊,4為豎線對齊),leader為前導符(0為無,1為.....,2為---,3為___,4為……)doc.paragraphs[n].runs[m].add_tab() #在塊操作中,可增加制表符。也可直接在段落或塊的text屬性中寫入‘ ‘,也表示一個制表符
塊操作:
doc.paragraphs[n].runs #返回段落n的塊集合,其組成元素為塊對象,可以通過索引獲取
doc.paragraphs[n].add_run(text=None, style=None) #在段落末尾增加一個新的塊
doc.paragraphs[n].runs[m].add_break(break_type=6) #在塊末尾增加分隔符。break_type為分隔符類型(2為下一頁分節符,3為連續分節符,4為偶數頁分節符,5為奇數頁分節符,6為換行符,7為分頁符,8為分欄符,9、10、11都可認為是換行符。註意區別節對象的start_type屬性,兩者分節符的代碼並不一樣)。換行符即‘ ‘,其也可通過.text屬性設置
doc.paragraphs[n].runs[m].add_text(text) #在塊末尾增加文字內容
doc.paragraphs[n].runs[m].text #返回或設置塊的文本內容
doc.paragraphs[n].runs[m].element.drawing_lst #返回塊中的圖形列表,包括內聯圖形和非內聯圖形,相比doc.inline_shapes更完整!!!
doc.paragraphs[n].runs[m] #返回段落n的塊對象m。可以通過其屬性訪問或設置塊的格式(主要是文字樣式),其主要屬性包括:
- 加粗: ‘bold‘,True表示加粗斜體:‘italic‘,True表示斜體下劃線:‘underline‘,一共可設置18種下劃線樣式(常用的0為無下劃線,1為單下劃線,3為雙下劃線,4為點下劃線,6為加粗單下劃線,11為波浪線)字體:‘font‘,返回字體對象,通過字體對象的以下屬性可以設置塊文字字體樣式:name:字體名稱size:字體大小,可通過磅數docx.shared.Pt()進行設置(詳見下文公用對象)bold:True表示加粗italic:True表示斜體underline:下劃線,同上可設置18種下劃線樣式
內聯圖形操作:
doc.inline_shapes #文檔所有內聯圖形的集合,其元素為內聯圖形對象,可索引
doc.paragraphs[n].add_picture(image_path_or_stream, width=None, height=None) #在文檔末尾增加內聯圖形,作為一個新的段落。image_path_or_stream為圖片文件路徑或文件對象。width(圖片寬度)、height(圖片高度)可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象),指定其中之一即可,另一將按比例縮放
doc.paragraphs[n].runs[m].add_picture(image_path_or_stream, width=None, height=None) #在塊末尾增加內聯圖形。image_path_or_stream為圖片文件路徑或文件對象。width(圖片寬度)、height(圖片高度)可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象),指定其中之一即可,另一將按比例縮放
doc.inline_shapes[n] #索引為n的內聯圖形對象。通過其屬性可訪問或設置對應內聯圖形的格式,主要屬性包括:
- 圖片尺寸:‘height‘, ‘width‘,可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象)圖片類型:‘type‘(3表示圖片,4表示鏈接圖片,12表示圖表,15表示smart-art圖形)
表格操作:
doc.tables #文檔中的表格對象集合,可索引
doc.tables[n].add_row() #在表格底部增加一行
doc.tables[n].add_column(width) #在表格右側增加一列,列寬為width,可通過尺寸對象docx.shared.xx()進行設置(詳見下文公用對象)
doc.tables[n].rows #返回表格行對象集合
doc.tables[n].columns #返回表格列對象集合
doc.tables[n].row_cells(rowx) #返回表格行索引為rowx的單元格對象集合
doc.tables[n].column_cells(colx) #返回表格列索引為colx的單元格對象集合
doc.tables[n].cell(rowx, colx) #返回表格行、列索引分別為rowx、colx的單元格對象。單元格具有屬性:‘add_paragraph‘, ‘add_table‘, ‘merge‘, ‘paragraphs‘, ‘tables‘, ‘text‘, ‘width‘等
doc.tables[n] #索引為n的表格,通過其屬性可訪問或設置表格格式,主要屬性包括:
- 對齊方式:‘alignment‘,缺省0表示左對齊,1表示居中,2表示右對齊。自動調整:‘autofit‘,如為True,表示根據內容自動調整列寬。False表示固定列寬。如果表格寬度超過頁面寬度,則無論True還是False,表格列寬都將自動調整表格方向:‘table_direction‘,True表示從右向左排列,False(默認)表示從左向右排列
樣式操作:
doc.styles #返回文檔樣式集合,其元素包括段落樣式、表格樣式、字符樣式、列表樣式,只可通過鍵訪問(鍵為樣式名稱)(區別於文檔其他對象集合通過索引訪問)
doc.styles.add_style(name, style_type, builtin=False) #新增一個樣式。name為樣式名稱,style_type為樣式類型(1代表段落;2代表字符;3代表表格;4表示列表),builtin(bool)表示是否為內建樣式
公用對象:
docx.shared.xx() #尺寸對象,可用於各類尺寸相關設置,包括多種單位制(厘米Cm、毫米Mm、英寸Inches、磅數Pt、Emu、緹Twips)
docx.enum.shape.WD_INLINE_SHAPE #表示內聯圖形類型的常量類
docx.enum.text.WD_ALIGN_PARAGRAPH #表示段落對齊方式的常量類
docx.enum.text.WD_PARAGRAPH_ALIGNMENT #同docx.enum.text.WD_ALIGN_PARAGRAPH
docx.enum.text.WD_BREAK #表示分隔符類型的常量類
docx.enum.text.WD_BREAK_TYPE #同docx.enum.text.WD_BREAK
docx.enum.text.WD_COLOR #表示顏色的常量類
docx.enum.text.WD_COLOR_INDEX #同docx.enum.text.WD_COLOR
docx.enum.text.WD_LINE_SPACING #表示行距的常量類
docx.enum.text.WD_TAB_ALIGNMENT #表示制表位對齊方式的常量類
docx.enum.text.WD_TAB_LEADER #表示制表位前導符的常量類
docx.enum.text.WD_UNDERLINE #表示下劃線類型的常量類
通過對上面對介紹,希望對大家運用Python_docx處理word文檔有幫助,當然編程之道十分靈活和廣大,小編也是這編程之路的探索者之一。如果有不好之處,還請各位大佬多多指教。
為了讓大家更好地更快速的學習Python,小編準備了一份適合Python初學者的系統入門學習資料,加群959997225即可免費領取。
本文來自網絡,如有侵權,請聯系小編刪除!
運用好Python處理文檔的小技巧,讓你成為女神心中superstar!