Python 遍历读取Word文档全部内容

本文以遍历如下图的word文件作为例子。
image

1.导入所需要的库

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

该部分主要使用了docx库和pandas库。

2.读取word文档对象

doc = docx.Document('test.docx')

3.编写能依次遍历文档内容的函数

'''依次遍历文档内容的函数'''
def iter_block_items(parent):
    # 判断传入的是否为word文档对象,是则获取文档内容的全部子对象
    if isinstance(parent, Document):
        parent_elm = parent.element.body
    # 判断传入的是否为单元格,是则获取单元格内全部子对象
    elif isinstance(parent, _Cell):
        parent_elm = parent._tc
    else:
        raise ValueError("something's not right")

    # 遍历全部子对象
    for child in parent_elm.iterchildren():
        # 判断是否为段落,是则返回段落对象
        if isinstance(child, CT_P):
            yield Paragraph(child, parent)
        # 判断是否为表格,是则返回表格对象
        if isinstance(child, CT_Tbl):
            yield Table(child, parent)

yieldreturn用法相似,yield在返回结果后,第二次调用该函数的时候将会是接着yield之后开始进行执行。所以第二次之后执行该函数是都在for循环里面,直到遍历完word内容的全子对象。

4.处理表格对象数据

'''获取表格数据,转换为dataframe数据结构'''
def get_table_dataframe(table):
    date = []
    keys = None
    for i, row in enumerate(table.rows):
        # 获取表格一行的数据
        text = (cell.text for cell in row.cells)  # text为generator生成器类型
        # 判断是否是表头
        if i == 0:
            keys = tuple(text)
            continue
        date.append(dict(zip(keys, text)))  # zip方法,按列打包为元组的列表。再转换为字典
    df = pd.DataFrame(date)  # pd依赖的DataFrame方法将字典数据转换成列表集
    return df

5.遍历word文档对象

# 遍历word文档,最后调用函数没有返回值时停止遍历
for block in iter_block_items(doc):
    # print(block.style.name)
    # 判断是否是表格
    if block.style.name == 'Table Grid':
        df = get_table_dataframe(block)
        print(df)
    # 判断该子对象是否是正文
    elif block.style.name == 'Normal':
        print(block.text)
    # 判断是否为标题1。如果是Heading 2则判断是否为标2,以此类推。
    elif block.style.name == 'Heading 1':
        print(block.text)

运行效果如下:

这是标题1
这是正文的一段话。下面是表格。

   1  2  3
0  1  1  2
1  3  1  2
2  3  1  3

这是正文的一段话。上面是表格

6.保存表格对象数据

(1)保存到csv

# path为:保存路径+文件名.csv。sep表示用逗号分隔,index是否要索引,header是否要列名
df.to_csv(path, sep=',', index=False, header=True, encoding='utf_8_sig')

(2)保存到excel

# path为:保存路径+文件名.xlsx。
df.to_excel(path, index=False, header=True, encoding='utf_8_sig')

7.读取表格数据

如果之后还需要读取在csv或者excel中的数据,我们可以用一下方法获取数据。
(1)从csv中读取

df = pd.read_csv(path)

(2)从excel中读取

# 读取工作簿第一个表
df = pd.read_excel(path, sheet_name='Sheet1')
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python读取Word文件,可以使用python-docx模块来完成。首先,需要安装该模块,在命令行中输入以下命令:`pip install python-docx`。安装完成后,就可以在Python中导入该模块,并使用它提供的功能来读取Word文件。 具体的读取步骤如下: 1. 导入python-docx模块:`import docx` 2. 打开Word文件:`doc = docx.Document("文件路径")`,其中"文件路径"是要读取Word文件的路径。 3. 遍历文档内容:可以使用for循环遍历文档的段落或表格等内容。 - 遍历段落:`for paragraph in doc.paragraphs:` - 遍历表格:`for table in doc.tables:` 4. 获取文本内容:可以使用`paragraph.text`来获取段落的文本内容,使用`table.cell(row, column).text`来获取表格某个单元格的文本内容。 通过上述步骤,就可以使用Python读取Word文件的内容了。需要注意的是,python-docx模块只能读取.docx格式的Word文件,对于老版本的.doc文件可能无法正常处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [用Python读写Word文档入门](https://blog.csdn.net/cainiao_python/article/details/121173283)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python笔记.docx](https://download.csdn.net/download/bxy0806/88235414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值