python读取word文件


python操作word:

python操作word最常用的库是python-docx库。根据官网的方法,如果我们要获取word中的文本,可以使用如下代码获取到:


from docx import Document

doc = Document(file_path)
big_str = ""
for one_pare in doc.paragraphs:
        big_str = big_str + one_pare.text 

上面的big_str获取到的就是word中所有的文本字段。

如果想要获取word文件中的所有表格,则可以使用下面代码获取所有表格:


from docx import Document

doc = Document(file_path)
for one_table in doc.tables:
	for one_row in one_table.rows:
		for cell in one_row.cells:
			print(cell.text) 

上面的所有代码就能把表格中所有单元格的值打印出来

痛点

以上只是得到了word文档中所有的文本和所有的表格,如果我们想要依次获取所有的表格和文本内容,并且保证顺序不会变乱怎么办呢?查询了一遍python-docx的官网,发现并没有找到相应的答案。后来还是从其他博客中找到灵感,写了一段demo,发现确实可以。代码如下:



import os

import pandas as pd
from docx import Document
from docx.oxml import CT_P, CT_Tbl
from docx.table import Table
from docx.text.paragraph import Paragraph


doc = Document(file_path)

# 获取父节点的所有子节点
doc_element_body = doc.element.body
children = doc_element_body.iterchildren()


# 遍历子节点,并判断子节点是段落还是表格
for one_child in children:
	if isinstance(one_child, CT_P):
		# 如果是文本,则进行文本操作
		pgh = Paragraph(one_child, self.doc)
		text = pgh.text
		
	elif isinstance(one_child, CT_Tbl):
		# 如果是表格,则进行表格操作
		table = Table(one_child, self.doc) 

这样就得到了正确顺序的所有文本和表格内容

doc转docx

python-docx这个库有个问题就是只能操作docx文件,对doc文件却无能为力。为了解决这个问题,需要把doc文件转化为docx文件。这时就用到了pywin32库,但pywin32只能被用在windows系统中,在linux系统中是不能安装pywin32的。此时我们就需要安装linux版的办公软件libreoffice。然后用soffice命令把doc转化为docx。这个命令可以通过python的os库的os.system()方法运行完成,十分方便。

以上就是所有python操作word文件的内容。