1. 程式人生 > >運用好Python處理文檔的小技巧,讓你成為女神心中superstar!

運用好Python處理文檔的小技巧,讓你成為女神心中superstar!

超過 排列 固定列 styles 垂直 stat rul 則無 不同的

今天小編給大家帶來了一篇,主要運用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!