1,利用python讀取純文字的word文檔,讀取段落和段落里的文字。
先讀取段落,代碼如下:
1 ''' 2 #利用python讀取word文檔,先讀取段落 3 ''' 4 #導入所需庫 5 from docx import Document 6 7 #打開word文檔 8 document = Document("D:/路徑/長恨歌.docx") 9 10 #獲取所有段落 11 all_paragraphs = document.paragraphs 12 #打印看看all_paragraphs是什么東西 13 print(type(all_paragraphs)) #<class 'list'>,打印后發現是列表 14 #是列表就開始循環讀取 15 for paragraph in all_paragraphs: 16 #打印每一個段落的文字 17 print(paragraph.text)
效果:
再讀取段落里的內容,代碼如下:
1 ''' 2 #利用python讀取word文檔 3 ''' 4 #導入所需庫 5 from docx import Document 6 7 #打開word文檔 8 document = Document("D:/路徑/長恨歌.docx") 9 10 #獲取所有段落 11 all_paragraphs = document.paragraphs 12 #打印看看all_paragraphs是什么東西 13 print(type(all_paragraphs)) #<class 'list'>,打印后發現是列表 14 #是列表就開始循環讀取 15 for paragraph in all_paragraphs: 16 #打印每一個段落的文字 17 #print(paragraph.text) 18 #循環讀取每個段落里的run內容 19 for run in paragraph.runs: 20 print(run.text) #打印run內容
效果如下:
其實都准確的獲取了文字內容,但是paragraph是保留了word文檔里的換行符,而run是沒有保留的。
2,利用python讀取純表格文檔,那要讀取的文字都是存儲在單元格里,需要讀取單元格里的內容:
1 ''' 2 #利用python讀取word文檔,表格文檔 3 ''' 4 #導入所需庫 5 from docx import Document 6 7 #打開文件 8 document = Document("D:/路徑/長恨歌-表格.docx") 9 #獲取文檔所有表格 10 all_tables = document.tables 11 12 #打印all_tables類型 13 print(type(all_tables)) #得到<class 'list'>,即列表 14 #開始循環讀取表格列表 15 for table in all_tables: 16 #循環讀取表格的每一行 17 for row in table.rows: 18 #print(row) 19 #循環讀取表格的每一個單元格 20 for cell in row.cells: 21 #打印單元格里的內容 22 print(cell.text) #打印
3,利用python讀取word文檔,文檔是表格加文字組合而成的。這個就設計word文檔格式問題了。將要處理的word文檔后綴名改為zip,發現也可以打開,里面有幾個文件如圖:
點開word目錄,發現有個document.xml,這就是我們要處理的文件。
代碼開始:
1 ''' 2 #利用python讀取word文檔,表格文檔 3 ''' 4 #導入所需庫 5 import zipfile #解壓文件庫 6 #先將要處理的word文檔用zipfile進行壓縮 7 word = zipfile.ZipFile('D:/路徑/長恨歌-文字+表格.docx') 8 9 #找到要處理的xml文件並以utf-8的格式讀取 10 xml = word.read('word/document.xml').decode('utf-8') 11 #打印看看 12 #print(type(xml)) #字符串 13 #print(xml) #打印整個字符串 14 #接下來分割字符串並存儲到列表中 15 xml_list = xml.split('<w:t>') #以字符串<w:t>進行分割字符串 16 #打印看是否符合預期 17 #print(type(xml_list)) #是列表 18 #print(xml_list) #列表內容 19 20 #開始切片,找標簽</w:t> 21 text_list = [] #新建空list用以存儲切出來的數據 22 #開始循環讀取列表xml_list 23 for i in xml_list: 24 #條件查找 25 if i.find('</w:t>') + 1: #切片查找是如果沒找到是會返回-1,我們+1讓他返回0,再運行else分支 26 text_list.append(i[:i.find('</w:t>')]) #如果不是返回0就把找到的依次追加到text_list末尾 27 else: 28 pass 29 #print(text_list) 30 #再將得到的列表拆分為字符串 31 text = ''.join(text_list) #以空字符串為間隔,將列表拆分為字符串 32 print(text)
第三個表格加文字的取出文字有點繞,多處理幾遍就行了。