首页 > 编程语言 >Python 遍历读取Word文档全部内容

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

时间:2023-09-06 09:01:28浏览次数:40  
标签:docx 遍历 Word parent Python text df import block

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

doc = docx.Document('test.docx')
'''依次遍历文档内容的函数'''

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)

'''获取表格数据,转换为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


# 遍历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)


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


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


df = pd.read_csv(path)
# 读取工作簿第一个表
df = pd.read_excel(path, sheet_name='Sheet1')

 

标签:docx,遍历,Word,parent,Python,text,df,import,block
From: https://www.cnblogs.com/QQ-77Ly/p/17681357.html

相关文章

  • Python第三章:程序控制结构
    1.range(a,b,c)  从a到b,不包括b,步长为c。2.random随机数  第一步:importrandom  生成从a到b的随机整数:random.randint(a,b)  生成从0到1的随机数:random()  生成从a到b,数量为c的数字:random.sample(range(a,b),c) 3.Python中的if、for、while都没有{},而是......
  • python函数的应用(一)九九乘法表
    函数实现99乘法表的打印#1.使用函数重构乘法口诀表并调用defmultiplication(n):foriinrange(1,n+1):forjinrange(1,i+1):print(j,"*",i,"=",j*i,end="\t")print()#调用函数a=int(input("请输入您想打印的乘法口诀表部分"))mult......
  • Python类属性与方法的使用
      #类属性与方法的使用classGoods:id_count=0#装饰器写法,@classmethod用来定义类方法@classmethoddefgenerate_id(cls):cls.id_count+=1returncls.id_countdef__init__(self):#商品的唯一序号,00001,00002,使用zfill......
  • python实现百钱百鸡之优化版​
    前言上一篇文章python实现百钱百鸡问题,用for循环实现了百钱百鸡的经典问题,文末简单说了下优化版的大体思路,这篇文章实现下。功能实现要求根据用户输入的购买钱数、公鸡、母鸡和小鸡的数量(小鸡按照3只作为一个整体来售卖,公鸡和母鸡都是按照一只来售卖),所买鸡的总数为100,给用户计算出......
  • 一行代码美化Python异常输出
     安装python-mpipinstallpretty_errors使用先来试试一个简单的错误。importpretty_errorsprint(1/0) 如果不使用pretty_errors报错信息如下:   bug少的时候,可能没有什么太大区别,当报错信息铺满一整页,差距就体现出来了 个性化配置如需......
  • Python开发之pip3
    简介pip是Python包管理工具,该工具提供了对Python包的查找、下载、安装、卸载的功能。命令使用查看pip3版本pip--version下载安装包使用以下命令pipinstallsome-package-name例如我们安装numpy包pipinstallnumpy我们也可以轻易地通过以下的命令来移除软件......
  • 《python从入门到实践》第七章习题记录
    点击查看代码#7-1汽车租赁:编写一个程序,询问用户要租赁什么样的汽车,并打印一条消息,如“LetmeseeifIcanfindyouaSubaru”。car=input("whichcardoyoulike?>")print(f"LetmeseeifIcanfindyoua{car}")#7-2餐馆订位:编写一个程序,询问用户有多少人用......
  • 国内镜像安装Python解释器及扩展包
    一、下载Python解释器1、下载地址官网(下载速度很慢):WelcometoPython.org淘宝镜像(推荐):CNPMBinariesMirror(npmmirror.com)2、下载方法前往淘宝镜像站,选择版本,这里以Python3.10.10为例。如果是64位的系统,点击python-3.10.10-amd64.exe,等待下载完成。3、安装Python解释......
  • Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档
    Node.js使用officecrypto-tool读取加密的Excel(xls,xlsx)和Word(docx)文档,还支持xlsx和docx文件的加密(具体使用看文档)。暂时不支持doc文件的解密传送门:officecrypto-tool读取加密的Excel示例一:xlsx-populate//只支持xlsx,xlsx-populate自带了解密功能,/......
  • Python开发实例(十一)单词记忆游戏:编写一个简单的游戏,测试用户对一组随机单词的记忆能力
    在这个实例中,我们将创建一个简单的单词记忆游戏。游戏的规则是随机展示一组单词,然后要求用户在一定时间内尽可能多地记住这些单词。时间到后,再询问用户输入这些单词。最后,计算并显示用户正确记住的单词数量。下面是单词记忆游戏的Python程序:pythonCopycodeimportrandomimport......